继承的定义

继承(extends)
现实世界中的继承是儿子拥有父辈的财产
在Java中的继承是子类拥有父类的“内容”
描述的是一种所属关系,“is a ”的关系

子类拥有父类的“内容”
内容:
非private修饰的成员变量
非priate修饰的成员方法
注意:
(1)构造方法不能被继承
(2)私有的成员变量和成员方法不能被继承

继承的由来:
多个类的共性内容不断向上抽取,得到的类就是父类,这多个类就是可以称为子类

继承的好处:
(1)提供了代码的复用性
(2)继承是多态的前提之一

继承中的成员变量访问的特点
(1)继承之后,只可能子类拥有父类的内容,但是不可以能父类去拥有子类的内容
(2)就近原则,子类中如果有则使用子类的,如果子类没有则使用父类的
(3)如果是通过成员方法间接访问,对象是谁我就找谁,如果没有再往上找

局部变量,本类的成员变量和父类的成员变量重名的情况下访问
(1)就近原则,谁离我近我就用谁
如果有局部变量,就使用局部变量
如果没有局部变量,就找本类的成员变量。
如果本类的成员变量没有,就找父类的成员变量
如果父类的成员变量也没有,报错
(2)如果局部变量,本类的成员变量和父类的成员变量都有
如果想访问局部变量,直接访问
如果想访问本类的成员变量,通过this.方法访问
如果想访问父类的成员变量,通过super.的方式访问

继承中成员方法访问的特点:
就近原则,谁离我近, 我就用谁
子类有该方法,创建子类对象使用的是子类的方法。
如果子类没有该方法,则向上找父类的方法。
如果父类也没有该方法,报错

方法重写(覆盖)
什么是方法重写:
在继承关系中(子父类),子类和父类中的方法声明(一般)一致,但是方法体进行重新定义的过程

为什么要方法重写(使用场景)
继承之后,父类的方法无法满足子类对于功能的需求

方法重写的条件(注意事项)
方法重写一般都是子类的方法声明和父类完全一致,但是如果偏要声明不一致,则需要满足以下条件
一大两同两小

一大:之类重写的方法的权限修饰符必须大于等于父类方法的权限修饰符
    权限修饰符:public > protected > 默认>private;

两同:
    子类重写的方法必须和父类 的方法名完全相同
    子类重写的方法的参数列表必须和父类的方法参数列表全球相同

两小:
    子类重写的方法的返回值类型必须小于等于父类方法的返回值类型(针对的只是引用数据类型对基本类型无效) 
        如果返回值类型是基本数据类型顾总是void,呢么子类必须一样
        如果返回值类型是引用数据类型,妈祖小于等于就可以,引用数据类型大小:父类>子类
    子类重写方法抛出的异常必须小于等于父类的异常,或者小于等于父类的异常
    如果父类美誉抛出异常,子类方法必须不嫩有异常。

·继承中,父子类构造方法访问的特点:
父类构造方法一定会先于之类构造方法执行。

扫描二维码关注公众号,回复: 4109870 查看本文章
    (1)每一个构造方法的第一行语句默认都有一个super(),调用的是父类的无参构造方法
    (2)如果显式在构造方法中使用super(参数)和this(参数),这样的语句调用父类的构造方法或者本类的其他构造方法,
        那么默认的super()就没有了。
        super(参数)和this(参数)必须位于构造方法的第一行来调用,而且它们在同一个构造方法中不能同时出现
        super(参数)和this(参数)只能在构造方法中使用,不能在其他地方使用

this和super的区别
this:代表当前对象的引用,谁来调用方法谁就代表当前对象
(1)可以调用本类的成员变量,通过this.成员变量
(2)可以调用本类的成员方法,通过this.成员方法
(3)可以在本类的构造方法中的调用本类的其他构造方法,通过this(参数)的方法

super:代表弗雷的呢片空间,通过它可以访问父类的内容
    (1):可以在本类成员方法中调用父类的成员变量,通过super.成员变量
    (2):可以在本类成员方法中调用父类的成员方法,通过super.成员方法
    (3):可以在本类的构造方法中调用父类的构造方法,通过super(参数)的方法

继承中的三个特点:
(1):Java语言中的类是单继承的,不支持多继承
也就是一个类中只能有一个直接父类,不能有多个直接父类
class A{}
class B{}
Class C extends A,b{}//错误的!,这个是多继承,不支持!
(2):Java语言中的类可以多层继承
多层继承:一个类不光可以继承父类中的内容,还可以继承爷爷类中内容
class A{}
class B extends A{}
class C extends B{}//正确的,这是多层继承,
(3)Java语言中的一个类可以是多个类的父类
class A{}
class B extends A{}
class C extendS A{}//正确的,A同时是B和C的父类。

猜你喜欢

转载自blog.csdn.net/qq_42815122/article/details/81292026