1,当父类有4个私有的成员变量,有toString方法,子类有自己的两个成员变量,并且也有toString方法时,父类的toString方法将被重写,toString方法只能打印出子类自己的成员变量,无法打印出继承到的成员变量,这时我们应该改写toString方法,将从父类继承到的变量改成get,如下
@Override public String toString() { return "Fridge{" + ",brand='" + getBrand() + '\'' + ", model='" + getModel() + '\'' + ", color='" + getColor() + '\'' + ", price='" + getPrice() +'\''+ ", door='" + door + '\'' + ", mode='" + mode + '\'' + '}'; }
get后面的是从父类继承到的,而没有get的是子类自己的变量
2,构造代码块与构造方法平级,在类内,构造方法外
1)构造代码块先于构造方法执行
2)每new一次,构造代码块都会执行一次
3,static修饰的静态代码块在加载前就执行
4,当父类子类都有静态代码块与构造代码块和构造方法时,调用顺序为
父类静态代码块>子类静态代码块>父类构造代码块>父类构造方法>子类构造代码块>子类构造方法
5,当父类没有接口,子类有接口时,使用多态的new方法使用不到子类的接口,应该使用最普通的方法new一个对象,如下
public static void main(String[] args) { ElectricAlarmDoor electricAlarmDoor=new ElectricAlarmDoor(); electricAlarmDoor.setBrand("苹果"); electricAlarmDoor.setHeight(77.7); electricAlarmDoor.setWeight(144.4); electricAlarmDoor.open(); electricAlarmDoor.close(); electricAlarmDoor.alarm(); } }
错误示范如下
Door door=new ElectricAlarmDoor(); door.setWeight(66.6); door.setHeight(77.7); door.setBrand("苹果"); door.alarm(); } }
这时door父类内没有子类的alarm接口,所以会报错
6,当多态调用的是成员变量时,编译与运行都看左边。如果多态调用的是成员方法,编译看左边,运行结果则是右边的。