Java 类的继承

继承

1.1 继承的概念

        继承是指在一个现有类的基础上构建一个新的类,新构建的类被称作子类,现有类被称作父类,子类会自动拥有父类所有可以继承的属性和方法。
在这里插入图片描述

1.2 继承的特征

在类的继承中,需要注意:
(1)一个类只能有一个父类(直接父类),不允许继承多个父类;
(2)多个类可以继承同一个父类;
(3)可以多层继承,即若类C继承类B,类B继承类A,这时,类C也可以称作类A的子类;
(4)子类父类是类与类的相对关系,一个类既可以是某个类的父类,又可以是另一个类的子类。

1.3 extends实现类的继承关系

        在Java中,继承是通过extends关键字实现的,如class Dog extends Animal,Animal是Dog的父类,Dog是Animal的子类。

1.3.1 数据成员的继承

        子类可以继承父类所有非私有的数据成员。
在这里插入图片描述
        在类Test01中的私有成员变量a没有被类Test继承,只能调用父类中没有被private修饰的变量b。

1.3.2 成员方法的继承

        子类可以继承父类所有非私有的成员方法。
在这里插入图片描述
        在类Test01中的私有成员方法没有被类Test继承,只能调用父类中没有被private修饰的sum()成员方法。

1.3.3 成员方法的覆盖

        子类可以重新定义与父类同名的成员方法,实现对父类方法的覆盖。
        需要注意的是:子类在重新定义父类已有的方法时,需要保持与父类完全相同的方法名、返回值类型和参数列表,否则就不是对父类方法的覆盖,而是定义了一个子类特有的方法,与父类方法无关。
在这里插入图片描述
        

1.4 关键字 this与super

1.4.1 this的使用

        this:指向当前对象的引用,可以理解为对象的名字;
        this的使用方法:
        (1)访问当前对象的数据成员        this.数据成员
        (2)访问当前对象的成员方法        this.成员方法(参数)
        (3)当有重载的构造方法时,用来引用同类的其他构造方法。        this(参数)

1.4.2 super的使用

        super:实现对父类的访问,引用当前对象的父类。
        super的使用方法:
        (1)用来访问直接父类隐藏的数据成员        super.数据成员
        (2)用来调用直接父类中被覆盖的成员方法        super.成员方法(参数)
        (3)用来调用直接父类的构造方法        super(参数)

1.5 构造方法的重载与继承

1.5.1 构造方法的重载

        构造方法的重载与普通方法一样,需要每个构造方法的参数类型或参数个数不同。
在这里插入图片描述
        传入的参数不同,调用不同的构造方法,第一个构造方法只对name属性进行赋值,age属性的值默认为0。

1.5.2 构造方法的继承

        子类可以继承父类的构造方法,构造方法的继承遵循以下原则:
        (1)子类无条件继承父类不含参数的构造方法
        (2)如果子类自身没有构造方法,则子类继承父类的构造方法,并将此方法作为自己的构造方法;如果子类自身定义了构造方法,则在创建新对象时,先执行继承父类的无参构造方法,再执行自身定义的构造方法
        (3)对于父类的含参构造方法,子类可以通过在自己的构造方法中使用super关键字进行调用,但super调用语句必须是子类构造方法的第一条可执行语句。


class Demo01 {
    int x = 0,y = 0,z = 0;
    Demo01(int x) {
        this.x = x;
    }
    Demo01(int x,int y) {
        this.x = x;
        this.y = y;
    }
    Demo01(int x,int y,int z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
    public int sum() {
        return x + y + z;
    }
}
public class Test extends Demo01{
    int a = 1,b = 1,c = 1;
    Test(int x){
        super(x);
        a = x + 10;
    }
    Test(int x,int y) {
        super(x,y);
        a = x + 100;
        b = y + 100;
    }
    Test(int x,int y,int z) {
        super(x,y,z);
        a = x + 1000;
        b = y + 1000;
        c = z + 1000;
    }
    public int sum() {
        System.out.println("super:x + y + z=" + super.sum());
        return a + b + c;
    }
    public static void main(String[] args) {
        Test test1 = new Test(1,2,3);
        Test test2 = new Test(10,20);
        Test test3 = new Test(100);
        System.out.println("a + b + c = " + test1.sum());
        System.out.println("a + b = " + test2.sum());
        System.out.println("a = " + test3.sum());
    }
}
运行结果:

super:x + y + z=6
a + b + c = 3006
super:x + y + z=30
a + b = 231
super:x + y + z=100
a = 112

Process finished with exit code 0
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值