My Blog

Java面向对象四之继承

学习笔记,仅供参考

参考B站Mirco_Frank - java与生活

本文重点:继承 | 方法重写 | super | final

之前通过 static 解决了社区名及社区通知功能,随后居委会又来要求,希望将这个小区养狗系统扩展为社区宠物管理系统。即让小区其他宠物也能加入到这个系统中,扩展用户量。

继承

为了将系统改为社区宠物管理系统,小伙找到了继承这种新的方法。

继承的思想即是理清 共性与个性 的关系。将各类动物共有的属性或行为放到一起写进一个类中,然后每类动物都能使用这些属性和行为。同时每类动物都还有一些自己独特的个性,将这些个性分别写入各自的类中。

继承

继承 :描述父类与子类之间的关系,子类能继承父类的属性和行为,就像儿子继承父亲的遗产一样。

在 Java 中使用 extends 修饰词表示继承,如 class Son extends Father() { ... }

// example
@Getter
@Setter
public class Animal() {
    // 父类中的成员变量
    private String name;
    private int age;
    private String variety;
    
    // 父类中的方法
    public void eat() {
        
    }
    public void sleep() {

    }

/*********分割线*********/

// 子类继承父类
public class Dogs extends Animal() {

}

/**********分割线*********/

public class Test() {
    public static void main(String args[]) {
        // 子类使用父类方法
        Dogs zhangDog = new Dogs();
        zhangDog.setName = "Jerry";
        zhangDog.setAge = 2;
        zhangDog.setVariety = "拉布拉多";

        zhangDog.eat();
        zhangDog.sleep();
    }
}
}

多层继承 :儿子继承父亲,孙子继承儿子,一层一层继承下去,底层的类继承上层类的特性。一类一类细分下去,更加贴近于现实生活。就像动画中灰太狼的饿狼传说,子孙们继承了永远吃不到狼的特性。

多层继承

多继承 :一个子类同时继承多个父类,在 Java 中是 不允许 多继承的。


方法重写

在子类中要想修改所调用父类方法中的内容,就要在子类中对该方法进行重写,重写后的方法就成了子类的特性。就像儿子能赚钱了,不再花父亲的钱了。在 Java 中用 @Override 来修饰重写的方法,在 IDEA 中 Alt+Insert,找到 Override Methods,选择要重写的方法即可

public class Animal() {
    // 动物类中的叫
    public void barking() {
        System.out.println("动物叫!");
    }
}

/**********分割线************/

public class Dogs extends Animal() {
    // 狗类重写动物类中的叫
    @Override
    public void barking() {
        System.out.println("汪汪汪!");
    }
}

/************分割线*************/

public class Cats extends Animal() {
    // 猫类重写动物类的叫
    @Override
    public void barking() {
        System.outprintln("喵喵喵!");
    }
}

super 啃老

(犯贱操作):当在重写父类方法时,又想重新调用父类的原方法,就重写方法中用 super.方法名 。就像儿子能赚钱了,还要花老子的钱,啃老行为。

// 对上面的狗类使用 super
public class Dogs extends Animal() {
    @Override
    public void barking() {
        // 此处狗类中的叫变为 "动物叫"
        super.barking();
    }
}

又因为子类不能继承父类的构造方法,所以要想使用子类中的构造方法,就要在子类中写无参、有参的构造方法。

若是还想用父类的构造方法,那么就在子类的构造方法中用 super 调用父类构造方法。啃老啃到底。

在 IDEA 中,Alt+Insert, Constructor, 选择父类的构造方法即可

public class Animal() {
    public Animal() {
        // 无参构造方法
    }

    // 有参构造方法
    public void Animal(String name, int age, String variety) {
        this.name = name;
        this.age = age;
        this.variety = variety;
    }
}

/*************分割线*******************/

public class Dogs extends Animal() {
    public Dogs() {
        // 子类的无参构造方法
    }

    // 子类调用父类的有参构造方法
    public void Dogs(String name, int age, String variety) {
        super(name, age, variety);
    }
}

final

final : 表示最后、最终。可以修饰类、方法和变量名

作用:

  1. 所修饰的类,不再有子类继承它

  2. 所修饰的方法,其子类不能重写该方法

  3. 所修饰的变量,变为常量,不能在被修改。而且常量的书写格式要全大写,以下划线分割单词