Java#18(面向对象三大特征之一:继承)

 

目录

一.继承

1.Java中提供了关键字extends,可以让一个类和另一个类建立起继承关系

2.继承的好处

3.什么时候使用继承?

 二.继承的特点

java只支持单继承,不支持多继承,但支持多层继承

 三.子类到底能继承父类中的哪些内容?

四.继承中成员变量和成员方法的访问特点

1. 继承中成员变量访问特点: 就近原则

2.如果出现了重名的成员变量怎么办?

3.构造方法的访问特点

五.方法重写注意事项和要求


一.继承

1.Java中提供了关键字extends,可以让一个类和另一个类建立起继承关系

格式: public class 子类名 extends 父类名  { }

子类也可以称为派生类 , 父类也可以称为基类超类

2.继承的好处

(1)可以把多个子类中重复的代码抽取到父类中,从而提高代码的复用性

(2)子类可以在父类的基础上,增加其他功能,使子类更加强大

3.什么时候使用继承?

当类与类之间,存在相同的内容时,并满足子类是父类中的一种,就可以考虑使用继承,阿里优化代码

子类是父类中的一种:例如:父类是Person,子类一个是Student,一个是Phone

                           这就不能使用继承,因为父类代表人,而Phone是手机,不是人的一种

 二.继承的特点

java只支持单继承,不支持多继承,但支持多层继承

1.单继承:一个子类只能继承一个父类

2.多继承:子类同时继承多个父类(在Java中是不允许的)

3.多层继承:子类继承于父类,而父类也可以有它的父类

例如:Student 继承于 Person,而Person 继承于 Animal,这就是多层继承

扩展:Animal就是Student的间接父类,而Person就是Student直接父类

        每一个类都直接或间接继承于Object

4.多层继承练习:

(题目来自黑马程序员)

现在有四种动物:布偶猫、中国狸花猫、哈士奇、泰迪暂时不考虑属性,只要考虑行为。请按照继承的思想特点进行继承体系的设计
四种动物分别有以下的行为:
布偶猫:吃饭、喝水、抓老鼠

中国狸花猫: 吃饭、喝水、抓老鼠

哈士奇: 吃饭、喝水、看家、拆家

泰迪:吃饭、喝水、看家、蹭一蹭

部分代码示范:

第一段是Animal类,第二段是狗类,第三段是哈士奇类,第四段是测试代码

package Demo;

public class Animal {
    public void eat(){
        System.out.println("吃饭");
    }
    public void drink(){
        System.out.println("喝水");
    }

}
package Demo;

public class Dog extends Animal{
    public void lookHome(){
        System.out.println("看家");
    }
}
package Demo;

//哈士奇类
public class Husky extends Dog{
    public void breakHome(){
        System.out.println("哈士奇在拆家");
    }

}
package Demo;

public class Test {
    public static void main(String[] args) {
        Ragdoll rd = new Ragdoll();
        rd.eat();//间接父类Animal中的,因为直接父类Cat有继承Animal,这就是多层继承
        rd.catchMouse();//直接父类Cat中
        rd.drink();//间接父类Animal中的,因为直接父类Cat有继承Animal,这就是多层继承

        Husky hs = new Husky();
        hs.lookHome();//直接父类Dog中的
        hs.drink();//间接父类Animal中的,因为直接父类Dog有继承Animal,这就是多层继承
        hs.eat();//间接父类Animal中的,因为直接父类Dog有继承Animal,这就是多层继承
        hs.breakHome();//哈士奇特有


    }
}

结果展示:

 三.子类到底能继承父类中的哪些内容?

构造方法: 非私有(public......)的不能,私有(private)的也不能

成员变量: 非私有的,私有的也

成员方法: 非私有的,私有的不能(父类中只有虚方法才能被子类继承)

虚方法: 非private,非static,非final

四.继承中成员变量和成员方法的访问特点

1. 继承中成员变量访问特点: 就近原则

先在局部位置找,本类成员位置找,父类成员位置找,逐级往上

2.如果出现了重名的成员变量怎么办?

System.out.printIn(name);//离它最近的name

System.out.println(this.name);//子类中的name

System.out.printIn(super .name) //父类中的name

3.构造方法的访问特点

(1)父类中的构造方法不会被子类继承
(2)子类中所有的构造方法默认先访问父类中的无参构造,再执行自己。
为什么?
子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化子类将无法使用父类的数据,所以子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化。
如何调用父类构造方法?
子类构造方法的第一行语句默认都是: super(),不写也存在,且必须在第一行

如果想调用父类的有参构造方法就要,要自己使用super进行调用

五.方法重写注意事项和要求

1.重写方法的名称、形参列表必须与父类中的一致
2.子类重写父类方法时,访问权限子类必须大于等于父类 (暂时了解:空着不写< protected<       public)

3.子类重写父类方法时,返回值类型子类必须小于等于父类
4.建议:重写的方法尽量和父类保持一致

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值