面向对象3大特征
《封装》
《实现封装》
《继承》
继承主要是为了提高代码的复用性,将很多类中共有(相似)的属性和方法提取出来,进行继承
《继承实现》
《细节注意》
注意是辈数越高则越先加载执行,任何一定都先加载的是object类
所谓is-a关系是:比如我有一个cat类和animal类,
cat is a animal,所以cat extends animal
《继承在内存中的体现》
相当于子类继承知识一样,他会将从不同父类中继承的知识都保存下来,并且从不同父类中继承过来的还会加以区分
《继承中使用从父类继承过来的属性与方法的规则》
所以这里如果用son.name,则其中是大头儿子,son.age是39,son.hobby是旅游
《super》
注意使用方法:super.属性名; super.方法名(参数列表)
上述使用super是不再看子类中的成员,而是直接往父类身上找,如果没有则进一步往上找
《重写》
《子类成员方法的重写(特殊)》
比如父类是public int sum(){},而子类是 private int sum(){},这就不行
《在继承中的注意点》
子类对象在进行构造时(调用构造函数),会自动调用超类的构造函数,但是其默认是调用其中的无参构造函数,如果在超类中无参构造函数没有显示地写出,被有参构造函数占用时,这个时候就会报错
这个时候我们就要在子构造函数的第一行调用super(),显示地调用其有参构造函数
《多态》
《方法的多态》
重载与重写体现出多态
《对象的多态》
《向上转型》
上述的行为为向上转型:
《向下转型》
《细节注意》
《动态绑定机制》
将上面的问题小小改变一下:
分析:
在a.sum()中肯定会调用class A中的sum(),但是这时class A中有getl(),class B中也有getl(),那么要调用那个中的呢?
我们能够看到
B对象中的方法会与该对象中的内存地址(运行类型)绑定,那么就说明了是调用class B中的方法
但是i在class A与class B中也都有:
则知道是调用class B中的i了
《综合》