1,多态,向上转型:解决的办法是后期绑定,它的含义就是在运行时根据对象的类型进行绑定。后期绑定也叫动态绑定或运行时绑定。
java中除了static方法和final方法,(private方法属于final方法)之外,其他所有的方法都是后期绑定,这意味着通常情况下,我们不必判定是否应该进行后期绑定--它会自动发生。final方法可以有效地“关闭”动态绑定,但是这样做对程序的整体性能不会有什么改观。
2,如果父类的一个方法的private,子类继承父类,当 Father f = new Child();f.method()时,调用的将是父类的方法,而非是子类的方法,因为private方法被自动认为是final方法,而且对导出类是屏蔽的,因为method()在子类中就是一个全新的方法
3,当Sub对象转型为Super引用时,Super sup=new Sub();任何域访问操作都将由编译器解析,因此不少多态的。所以sup.field访问的将是父类的变量,而不是子类的变量。子类Sub包含两个域,this.field和super.field,默认是this.field。
如果某个方法是静态方法,它的行为就不具有多态性,静态方法是与类,而并非与单个对象相关联的
4,构造器不具备多态性,它实际上是static方法,只不过该static是隐式的,比如说构造方法中可以存放静态变量,只有静态方法中才可以使用静态变量。
5,静态成员的初始化只有在必要的时候才会进行,它优先于非静态成员的初始化、构造方法、普通方法。
非静态成员的初始化优先于构造方法和普通方法,并没创建一次对象就会初始化一次
静态块的初始化并非程序一启动就执行,而是用到的时候才执行:当首次生成这个类的一个对象时,或者首次访问属于那个类的静态数据成员时。
实例化块执行的条件是必须有该类的对象被创建。实例化快的执行优先于构造方法。并且每创建一次对象,都会执行实例化块一次。
继承子类父类的多级初始化:
1)调用基类构造器。 2)按声明顺序调用成员的初始化方法。 3)调用导出类构造器的主题。 父类的构造方法调用顺序优先于本类的变量初始化顺序。
6,抽象类可以有构造函数,因为在继承的时候需要调用父类的构造函数。接口不能有构造函数,抽象类和接口都不能被实例化。
7,接口:1)只有public和包访问权限。 2)变量隐式的是public static final。 3)方法默认是public。