JAVA-继承

1.继承

        让类与类之间产生关系(父子类),子类可以直接访问父类中的非私有的成员(即成员没有被private修饰),在继承关系中父类更通用,子类更具体和特殊。

继承的使用条件:

        当类与类之间存在相同(共性)的内容,并且产生了 is a(谁是谁)的关系,即有一定的逻辑关系

2.继承的格式:

class 子类名 extends 父类名{  }

父类:又称基类,超类

子类:又称派生类

一个类如果没有使用关键字extends,那么这个类默认继承object类

3.创建类的细节(不建议这样使用(即一个java类文件中存在多个类))

1.一个Java文件中可以编写多个class,但要保证类与类之间是平级关系,

2.只能有一个类被public修饰,public修饰的类的类名称与文件名相同

可以在练习代码时为了方便(偷懒)可以这样用,但还是建议一个类文件中只创建一个类

4.继承中的成员访问特点

  • 成员变量

this:调用本类成员(与super作比较)

super:调用父类成员

子类可以继承父类的非private修饰的变量

对于父亲的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承,否则不能继承

子类可以继承父类的成员变量,但子类中定义了与父类同名的成员变量,则子类的成员变量会屏蔽父类的成员变量,如需访问父类的同名成员变量,则要通过super.成员变量 访问

this与super的异同比较:

this:代表本类对象的引用(地址)

super:代表父类存储空间的标识

this

访问成员变量:(this.本类成员变量)

访问成员方法:(this.本类成员方法)

访问构造方法:访问本类构造方法 (this(); this(….))

super

访问成员变量:(super.父类成员变量)

访问成员方法:(super.父类成员方法)

访问构造方法 :父类构造方法(super(); super(….))

super调用父类成员的省略规则:

      被调用的成员方法和变量,在子类中不存在,可省略super.

this(),super()都争夺构造方法第一行位置,二者不可共存

this关键字的使用: 成员变量和局部变量出现重名时JAVA会根据就近原则进行使用,

作用:解决成员变量和局部变量之间重命名的问题

this可以调用本类的成员变量和成员方法

this的省略条件:

本类成员方法:this可以省略(即可写可不写)

本类成员变量:方法中没有出现与成员变量重命名的变量可以省略

  • 成员方法:

子类可以继承父类的非private方法

对于父亲的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承,否则不能继承

子类可以继承父类的成员方法,但子类中定义了与父类同名的成员方法,则子类的成员方法会屏蔽父类的成员方法,如需访问父类的同名成员方法,则要通过super.成员方法 访问

方法重载(overload):对于同一类中的多个方法,方法名相同,参数不同(类型不同,个数不同,顺序不同),与返回值无关,这被称为方法重载(与方法重写做个比较)

方法重写(override)也称为方法覆盖:子类中出现了与父类重名的方法(其实是对父类方法根据自身需求进行加工,使得方法符合自身逻辑)

判断重写方法的方法:

1.两同两小一大

两同:(方法名,参数列表一致)

两小:子类返回值类型比父类相同或小, 子类抛出异常小于等于父类方法抛出异常

一大:访问权限要大(子类与父类相同或高于父类)

2.注解:(IntelliJ IDEA Community Edition编译器中)在重写方法上面写@override,方法不报错就证明此方法是重写方法

使用方法重写的条件:

        当子类需要父类的方法,但父类方法的逻辑不好,故在子类中对父类方法进行修改或增强

方法重写的技巧:(在IntelliJ IDEA Community Edition编译器中)

1.直接写所要重写的方法名,会有代码提示,点击直接生成

2.右击鼠标->选择生成->重写方法->选择父类中要进行重写的方法,自动生成

方法重写注意事项:

父类中私有方法不能被重写

子类的重写方法访问权限要大于等于父类(public(不同包的无关类)>protected(不同包的子类)->default(默认,同一包中)>private(同一个类中))

不同包的子类:两个包中的各一个类,并且两个类产生子父继承

不同包的无关类:任意包中的类可以互相访问

实际开发中(public,private)用的多,其他基本不用

  • 构造方法: 

 构造方法(对象的初始化方法):(父类的构造方法不能被子类继承)

        子类在初始化之前,父类要提前完成初始化,所以子类如何完成对父类的初始化?

答:在子类的构造方法中调用父类的构造方法进行初始化,子类特有的成员变量自己完成初始化(super()或者super(......))。

如果父类的构造方法都是有参的,则必须在子类的构造方法中显式地通过super关键字调用父类的构造方法并配以适当的参数列表。

如果父类有无参构造方法,则不必在子类的构造方法中调用super(),因为除了object类,在所有子类的构造方法的第一行代码,都默认隐藏了super()(即父类的空参构造方法),通过这句代码,访问父类的空参构造,完成父类初始化,这是系统自动调用执行的我们无需操行,只要提供父类的无参构造方法即可。

(生成子类构造方法的技巧:鼠标右击->选择生成->选择构造函数->选择构造函数的类型(空参还是有参))

java中的所有类(这里可理解为父类)都直接或者间接继承到了object类(object类是所有类的祖先)

5.继承的特点:

        只支持单继承(一个类只能继承一个父类),不支持多继承(即一个类不能同时继承多个父类,一个儿子不能有多个爹,但一个类可以被多个类继承,即父亲可以有多个儿子),但支持多层继承(即父亲继承爷爷,儿子继承父亲,形成三代继承)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值