面向对象三大特征--- 继承

继承的概念

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

生活中的继承, 儿子继承父亲的财产, 父亲的财产可以给儿子

程序中的继承: 子类 继承父类的属性和方法


类的继承格式

在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:

类的继承格式

 class 子类 extends 父类 { }


继承的优缺点

继承的目的: 代码重用(多个类有大量相同的代码, 为了重复代码不重复写, 我们可以把这个类相同的代码抽取出来,创建父类存放.)

缺点: java是单继承, 一旦使用,这个类就不能再继承其他类(在 java 中只允许单继承,而不允许多重继承,也就是说一个子类只能有一 个父类,但是 java 中却允许多层继承.Java中有一个祖先类, 所有的类间接继承 java.lang.Object类

java支持多层继承,父类暴增

                                             (父类暴增)

继承代码实例

父类:

子类:

运行结果: 

 

   由上面的程序可以发现,在 Student 类中虽然并未定义 name age 属性和eat();的构造方法,但在程 序外部却依然可以调用 name 或 age,这是因为 Student 类直接继承自Father类,也就 是说 Student 类直接继承了 Person 类中的属性和方法,所以 Student 类的对象才可以访问到父 类中的成员。


子类对象实例化

  子类在是实例化对象时对父类构造方法的调用看下代码:

父类:

子类:

 

 测试类及其输出结果:

  从程序输出结果中可以发现,在测试程序中实例化的是子类的对象,但是程序却先去调用父类中的无参构造方法,之后再调用了子类本身的构造方法。所以由此可以得出结论,子类对象在实例化时会默认先去调用父类中的无参构造方法,之后再 调用本类中的相应构造方法。 (实际上在子类构造方法的第一行默认隐含了一个“super()” 语句

       继承条件下构造方法的调用规则如下:

  • 如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,写不写“super();”语句,效果是一样的。
  • 如果子类的构造方法中通过super显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。
  • 如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。
  • 特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。

super关键字:

super: 表示的父类的对象:

super.方法名() 调用父类的方法

super.属性名 调用父类的属性 实际开发不会使用, 对属性进行私有化

super() 调用父类的构造方法 经常使用

使用super调用父类构造方法:

注意: 1. 必须在子类的构造方法

          2.必须位于子类构造方法的第一行代码

          3. 不能与this() 并存


访问修饰符:

(访问修饰符 可以修饰属性,方法,构造方法)

常见: public , private 实际开发中使用最多

访问修饰符: 从范围的大到小:

1) public 公开的 所有

2) protected 受保护 同包,是子类

3) 默认/缺省 同包

4) private 私有 同类

注意:

protected修饰符的修饰的成员变量和方法也称为受保护的成员变量和方法, 受保护的成员变量和方法可以在本类或同一个包中的其它类(包括子类)中通过类的实例进行访问,也可以被同一个包中的类或不同包中的类继承,但是不能在不同包中的其它类(包括子类)中通过类的实例进行访问。


方法的重写:

法重载和方法重写的区别。

方法的重载是指在一个类中,出现多个方法名相同,但参数个数或参数类型不同的方法。方法覆盖体现了子类补充或者改变父类方法的能力,通过覆盖,可以使一个方法在不同的子类中表现出不同的行为。

方法的重写: 子类重写父类的方法,子类对父类的方法的方法体实现不满意,重新自己实现方法体。

方法重写的代码实例:

 

 

重写规则
在重写方法时,需要遵循以下的规则:

(一)  子类重写父类的方法
()  父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,

()  父类的返回类型必须与被子类重写的方法返回类型相同,

()  Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。


总结:

  • 子类拥有父类非private的属性,方法。
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法。
  • Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,
  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxmm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值