java编程思想学习-第8章多态

来源:互联网 发布:数据库长整型 编辑:程序博客网 时间:2024/05/20 20:57

1.java方法分为前期绑定和后期绑定,static方法和final方法(private方法类似于final)为前期绑定,其余都是后期绑定。

2.java多态和C++多态不一样,C++中只有virtual方法是多态,java中除了static和final方法,其他的方法都类似于virtual方法。思考final方法或者private方法的用法。

3.java成员变量不具体多态性。

4.java不要再构造函数中调用动态绑定函数。如果要在初始化成员变量,可以用初始化块。默认初始化顺序:

父类static成员 -> 子类static成员 -> 父类普通成员初始化和初始化块 -> 父类构造方法 -> 子类普通成员初始化和初始化块 -> 子类构造方法


5.Java与C++的区别之构造函数中的多态

我们有个一个类A,在构造函数中调用自己的方法f。

现在有一个类B,继承A,并覆盖了方法f。

那么构造函数B调用时先执行A的构造函数,此时在A的构造函数中的f是指A::f, 还是B::f呢?

在C++中,对于函数调用的多态主要是通过虚表实现,在构造函数完成前,虚表未实现,所以此时不会有多态特性,故调用的仍然是A::f。

但是在Java中表现则不是的,会调用到子类的方法,即B::f。

在这一点上,C++的表现应该更加合理。

故在Java中,若在构造时保证调用到的不会是派生类的方法,一定要调用private, 或final方法。因为final方法不会被覆盖,private也是,private默认其实就是final的,覆盖private方法其实是生成了一个新方法。

6.java覆盖函数允许协变返回类型。



学习的文章:

https://www.cnblogs.com/punkisnotdead/p/4936432.html




原创粉丝点击