继承的概念
什么时候使用继承
只有单继承没有多继承
继承特点
小案例思考
子类到底能继承父类的内容
构造方法 都不能
成员变量 都能
成员方法 非私有能 私有不能
构造方法能继承的原因
这个是不能继承的,因为假如继承过来之后类名与方法名不一致
成员变量的继承内春原理
第一句话是在右边方法区加载这么多字节码文件,本类,子类,父类三种
首先是左边,在栈内存中加载一个zi 对象,开辟出一个小的空间,为了储存z的地址值
右边new一个新的空间,因为有子类和父类,所以开辟了两个空间,不过地址都是一样的
此时如下图这一句代码相当于执行完了
剩下的几行就是打印地址,以及赋值
执行完后main方法出栈
此时右边的堆内存里的数据也没用了,成了垃圾
成员变量的继承原理有private类型的
整体与上次相似
因为有private修饰,所以会报错
虽然能继承下来,在右边的堆内存里存在,但是因为被private修饰所以不能直接使用
成员方法继承的内存图
刚加载第一行的时候方法区加载字节码文件,因为object是所有方法的父类,oboject虚方法表里有5个方法,fu方法里有一个fuShow1方法是符合的,不是private,不是static,不是final.
现在是正常的new出一个空间,main这边储存地址值,都与之前的相同
最后一个fushow2,因为是private修饰,所以在虚方法表里无法找到,所以是报错了
继承中成员变量的访问特点
就近原则,谁离的近谁就用谁
用this,super关键字,可以指定用谁
子类中只能用一个super,super是到父类的成员变量中找
如果直接打印变量,会先在局部变量中找,再到本类成员变量中找,再到父类中找
方法的重写
方法重写就是父类不好用,没能实现子类的需求,子类用同样的名字重写了一个方法。就是方法重写
方法重写的实质
方法的重写,首先C类虚方法表里有两个方法,B中有同名的method2,那么在B类中method2就发生了覆盖,将C类中的method进行了替换
方法重写的注意事项
这个截图主要是解释第三项,
例如animal是dog和cat的父类,所以animal大于dog和cat,以此来判断返回类型子类必须小于父类
如果父类中的方法无法满足子类的需求,那么需要我们重写方法,重写的时候父类中有的代码,可以用super来调用一下,更加的方便
总结
继承中构造方法的访问特点
通过例子具体的理解一下
首先创建学生对象,到学生的那个javabeen中后,suoper()又调用了父类的无参构造(没有参数的那个构造方法),最后才执行子类student中语句
结果便是如此
假如创建学生对象时就是带参数的 那么在子类中就要写上带参构造,才能不报错
如果是有参数的,那么访问的也一定要是有参数的方法
总结
This,super使用汇总
左边的this是隐藏,不用写就存在,写上去更加的直观,相当于把右边创建的那个s的地址值,传到了this,在左边this就是s.
This()的用法,用在无参的方法之中,可以跳转到有参的方法