对象创建过程
package day0903; public class Test1 { public static void main(String[] args) { new B(); new B(); } } class A { int v1 = 1; static int v2 = 2; static{ System.out.println("A静态块"); } public A(){ System.out.println("A构造方法"); } } class B extends A { int v3 = 3; static int v4 = 4; static{ System.out.println("B静态块"); } public B(){ System.out.println("B构造方法"); } }
第一次用到A和B类
加载父类,父类静态变量分配内存
加载子类,子类静态变量分配内存
父类静态变量赋值运算,和静态初始化块
子类静态变量赋值运算,和静态初始化块
创建对象
创建父类对象,父类的非静态变量分配内存
创建子类对象,子类的非静态变量分配内存
执行父类非静态变量赋值运算
执行父类构造方法
执行子类非静态变量赋值运算
执行子类构造方法
接口
作用:结构设计工具,用来解耦合,隔离实现
极端的抽象类:全是抽象方法
关键字:interface
继承:implement
接口中只能定义:
常量
公开的抽象方法
公开的内部类、内部接口
一个类可以继承多个接口
class A implements X,Y,Z { } class A extends B implements X,Y,Z { }
接口之间继承
interface A extends X,Y,Z { }
变形金刚
package day0904; import java.util.Random; import java.util.Scanner; public class Test1 { public static void main(String[] args) { Transformer t = new Transformer(); Sword s = new Sword(); AK47 a = new AK47(); Lyb l = new Lyb(); System.out.println("按回车继续:"); while (true) { new Scanner(System.in).nextLine(); int r = new Random().nextInt(4); switch (r) { case 0: t.w = null; break; case 1: t.w = s; break; case 2: t.w = a; break; case 3: t.w = l; break; } t.attack(); } } } package day0904; public interface Weapon { int TYPE_COLE = 1; int TYPE_HOT = 2; int TYPE_NUCLEAR = 3; void kill(); String getName(); int getType(); } package day0904; public class Sword implements Weapon { @Override public void kill() { System.out.println("使用"+this.getName()); } @Override public String getName() { return "大宝剑"; } @Override public int getType() { return Weapon.TYPE_COLE; } } package day0904; public class AK47 implements Weapon { @Override public void kill() { System.out.println("使用"+this.getName()); } @Override public String getName() { return "AK47"; } @Override public int getType() { return Weapon.TYPE_HOT; } } package day0904; public class Lyb implements Weapon { @Override public void kill() { System.out.println("使用"+this.getName()); } @Override public String getName() { return "狼牙棒"; } @Override public int getType() { return Weapon.TYPE_NUCLEAR; } } package day0904; public class Transformer { Weapon w; public void attack() { if(w == null) { System.out.println("用牙咬"); return; } w.kill(); } }