1.
如果一个类定义了一个没有执行代码的方法,编译会出错,必须加上
abstract
关键字,使其成为抽象方法。因抽象方法无法被执行,故该类无法被实例化。包含抽象方法的类必须用abstract
修饰,申明为抽象类,否则会编译出错。
2.
抽象类要求其子类必须重写其定义的抽象方法。
3.
面向抽象编程:尽量引用高层类型,避免引用实际子类型的方式。
高层类型定义接口规范,子类型具体实现逻辑。
4.
多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。多态仅针对于实例方法,不包括静态方法和变量。
“编译看左边,运行看右边。”——编译的时候,必须父类(或抽象类、接口)中有所调用方法的具体实现(或方法签名),否则会编译报错;运行的时候,调用实际类型的实例方法,若方法被重写,调用的是子类中重写后的方法,若未重写,调用的则是子类继承自父类的方法。
5.
创建一个实现类MyImplement2,该实现类不仅继承了MyImplement1并且实现了Interface2。
此时在实现类MyImplement2中调用helloWorld()方法,到底执行的是MyImplement中的方法还是执行Interface2中的方法?
答:因为类优先于接口,所以将会执行MyImplement中的方法。
6.
虽然实例可以访问静态字段,但是它们指向的其实都是Person class的静态字段。所以,所有实例共享一个静态字段。
因此,不推荐用实例变量.静态字段去访问静态字段,因为在Java程序中,实例对象并没有静态字段。在代码中,实例对象能访问静态字段只是因为编译器可以根据实例类型自动转换为类名.静态字段来访问静态对象。