对面对象的三大特性之一:继承

本文介绍了Java编程中的继承概念,包括父类与子类的关系,代码重用,以及如何通过`extends`关键字实现继承。通过Animal、Cat和Duck的例子展示了如何创建和使用继承的类。同时,探讨了继承的特性,如方法重写、super关键字的使用以及多层继承的关系。最后,强调了在复杂的继承层次中,应避免过度继承并适时使用final关键字。
摘要由CSDN通过智能技术生成

继承

继承: 子类继承父类,使得子类拥有父类中的成员变量与方法的属性的行为。

例如动物(Animal)都有名字,都会吃饭。而猫(Cat)不仅有名字,还有颜色,会吃饭,它还会跑;而鸭子(Duck)不仅有名字,会吃饭,还会游泳和飞。
那么此时动物与猫和鸭子就达到了继承的关系。
此时,Animal 这样被继承的类,我们称为 父类 , 基类 或 超类, 对于像 Cat 和 Duck 这样的类,,我们称为 子类,子类会继承父类的字段和方法,,以达到代码重用的效果。

语法:

class 子类 extends 父类 { 
 
}

现在用代码实现上例的继承关系

Animal类

public class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }

    protected void eat() {
        System.out.println(this.name + "正在吃饭!");
    }
}

Cat类

public class Cat extends Animal {
    String color;

    public Cat(String name, String color) {
        super(name);
        this.color = color;
    }

    @Override
    public void eat() {
        System.out.println(this.color + "的" + this.name + "正在吃饭!");
    }

    public void running() {
        System.out.println(this.color + "的" + this.name + "跑起来了!");
    }
}

Duck类

public class Duck extends Animal {
    public Duck(String name) {
        super(name);
    }

    public void swimming() {
        System.out.println(this.name + "正在游泳!");
    }

    public void flying() {
        System.out.println(this.name + "飞起来了!");
    }
}

Test类

public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal("小动物");
        Cat cat = new Cat("小猫", "白色");
        Duck duck = new Duck("小鸭");
        animal.eat();      //小动物正在吃饭!
        System.out.println(cat.getName() + "是" +
                cat.getColor() + "的。");   //小猫是白色的。
        cat.eat();         //白色的小猫正在吃饭!
        cat.running();     //白色的小猫跑起来了!
        duck.eat();        //小鸭正在吃饭!
        duck.swimming();   //小鸭正在游泳!
        duck.flying();     //小鸭正在游泳!
    }
}

继承的特性

  1. 具有传递性,在子类中,在权限允许的前提下,可以不声明而继承父类中的变量与方法。即只要父类中的变量和方法的权限允许,子类不需要再次声明这些变量与方法。
  2. 子类中有与父类同名的变量,此时子类的同名变量会覆盖父类的同名变量,但如果要访问父类的同名变量,可以用 super 关键字来实现。
  3. 子类可以重写父类已有的方法,但如果要访问父类中被重写的方法,需要使用 super 关键字来调用。
  4. 在类的强制转换中,只有继承层次才能发生。
  5. 子类不能访问父类中的私有字段和私有方法(不是没有继承,是不能访问)。
  6. 在子类的实例中,也包含父类的实例。
  7. 继承父类后,在构造子类时,一定要先帮父类构造。

关于重写:

  1. 子类的修饰权限一定要大于等于父类的修饰权限。
  2. 被修饰的方法不能用 final 关键字修饰。
  3. 被 static 关键字修饰的方法不可被重写。
  4. 实现重写方法要养成添加重写注释 @Override 的好习惯。
  5. 返回值必须相同,或者构成父子关系,即协变类型(被重写的方法返回值为父类类型,重写的方法返回值为子类类型)。

多层次的继承关系
我们总在生活中看到狗,但是狗也是隶属关系的。例如犬包含牧羊犬,牧羊犬包含边境牧羊犬,边境牧羊犬包含… 这种关系我们成为多层继承。
下面用代码实例:

Animal类

public class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }
}

Dog类

public class Dog extends Animal{
    public Dog(String name) {
        super(name);
    }
}

ShepherdDog类

public class ShepherdDog extends Dog{
    public ShepherdDog(String name) {
        super(name);
    }
}

BorderCollie类

public class BorderCollie extends ShepherdDog {
    public BorderCollie(String name) {
        super(name);
    }
}

这样的继承方式称为多层继承, 即子类还可以进一步的再派生出新的子类。

  1. java中只支持单继承,即一个类最多只能继承一个类,但是可以支持多层继承,但是即使如此,我们并不希望类之间的继承层次太复杂, 一般我们不希望出现超过三层的继承关系,如果继承层次太多,就需要考虑对代码进行重构了。
  2. 一般在多层继承层次达到三层的继承关系时,我们就要对第三层类使用 final 关键字进行修饰,表示该类不能再被继承。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值