1.构造方法(就是方法名是类名没有返回值的类型),无论用private修饰还是public修饰都不能继承,自然也不能使用。构造方法不同于一般方法是直接没有返回值类型构造方法不管是用private还是用public修饰子类都无法继承

 

2.成员变量都能继承,成员变量不管在父类中是public还是private型,子类都可以继承,但是private型不能调用,要通过get和set方法才能调用,

3.成员方法private修饰的不能继承,自然也不能调用因为不能加入到虚方法中,其他的可以继承和调用,

左边表示从父类继承的成员变量右边表示自己的变量,当new是一起加载

 

原始父类的方法能被加入虚方法的会被子类继承,未加入的就没有继承,然后子列会根据功能添加方法或者对方法进行重写以满足自己的需求,然后会在生成本类可被继承的形成虚方法,在继承给其方法,其子类延续操作一直向下

 

只有父类的虚方法才能被子类继承;如下c为最高父类,c的虚方法会传承给b类,b继承c的基础上会添加自己的成员方法,然后再传承给其子类,这样每个子类都包含类继承的父类(直接和间接都是)的成员方法,还有自己的方法可以调用

父类的私有成员方法直接调用会报错

 

虚方法:

非private修饰,非static修饰,非final修饰
添加到子类的虚方法是非private的


创建对象时左边的对象变量对应地址值,当出现new时会有开辟队,左边框记录继承的虚成员变量,右边则存放自己的成员变量
如下调用fu show2时在虚方法中找不到,在自己的成员方法里也找不到,智能到父类找到父类后发现是私有的则直接通过对象调用显示报错


能添加到虚方法中的能被子类继承不能添加的不能被子类继承


父类中的构造方法无论public还是private都不能被子类继承,父类的成员变量都能被子类继承但是,非private的成员变量才能被直接通过对象调用,private只能用get和set调用复制。而父类成员方法只有能加入虚方法(非satic非private修饰,非final修饰)的才能被子类继承调用

就近原则,

使用成员变量会首先在局部位置找,找不到会在本类中找,还没有则会在父类中着。全找不到则报错

 

当局部没有某成员变量则他的本地调用,this调用和super调用都是一个效果

 当方法调用中不加this时,会先调用本地方法然后,找不到再找本类。不行再找父类

方法重写,

子类要继承父类的方法,但是父类不能完全满足子类的需求时,子类方法体可以添加功能

子类覆盖了从父类继承的虚方法表里的方法,这就是重写让一个方法具体到子类时更强大

 

重写时子类方法注意事项

的访问权限大于父类方法,子类的返回值类型小于父类的返回值类型。两者净量保持一致以免出错

只有能添加到虚方法中的才会被重写。故private等不会被重写

重写时方法名和型参要一模一样否则会报错(只有方法体不一样)

子类的访问权限必须大于父类否则会报错线面protect权限小于public权限所以报错


如下为子类返回值小于父类,dog小于animal


只有被添加到虚方法的父类方法才能被重写,如private的类方法,不能被重写重写则会报错

不能加到徐方法的private static final

作业技巧

画图从下到上抽取共性,写代码从上到下先为子类创建继承部分
子类继承父类的虚方法,虚方法不能满足条件时才重写,当父类没有的方法子类需要添加的不属于重写

 类继承父类传下来的虚方法时,该方法不够满足是,用super继承父类的然后再加自己学需要的,就成了重写效果

 

总结 

 

 


从写本质是子类重写方法覆盖从父类继承下来的虚方法


构造方法不能被继承原因

,应为假若能继承子类的构造方法与子类类名不同将产生矛盾,构造方法的方法名要与类名一致。

 子类在初始化时肯能用到父类的数据,如果父类没有初始化则子类无法继续,所以一般子类会先默认调用父类的无惨构造方法以实现对父类的初始化为自己铺平到了

子类构造方法第一节都是默认:super();不写也存在系统会默认调用,但是如果调用类有参则,必须手写super,且必须在第一行

 

 当子类调用父类完成父类初始化时才会执行子类的后面语句,应为他可能用的父类的初始化值

 调用时通过对象初始化后赋给子类变量,子类变量传到父类

继承构造方法总结

 

show方法中隐含了一个this

 虚拟机眼里this就是一个局部变量

 super父类地址

 

 this和super都要写在构造方法的第一行


this能做初始化
构造方法一个是,用无参方法一个是全参方法一个是get和set

 

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐