← 返回首页
JavaSE系列教程 (二十五)
发表时间:2020-01-02 19:41:05
讲解什么是继承和方法重写。

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

Java只允许单根继承,所有类在没有显式声明父类的情况下,都是默认继承自Ojbect类。如下图所示:

==继承最大的好处就是提高了代码的可重用性。==

1.如何实现继承

在java中使用关键extends来实现继承。属性一般使用protected修饰表示希望子类能继承使用。

例如:

public class Animal {

    protected String gender; //动物的性别
    protected int age; //动物的年龄
    protected double weight; //动物的体重
    protected double height; //动物的身高

    public Animal() {

        System.out.println("一个动物诞生了...");
    }

    public void bark() {
        System.out.println("动物叫...");
    }
}


public class Cat extends Animal {

}

public class Dog extends Animal {

}

public class Test {

    public static void main(String[] args) {

       Animal dog = new Dog();
       Animal cat = new Cat();
       dog.bark();
       cat.bark();
    }
}

运行结果:
一个动物诞生了...
一个动物诞生了...
动物叫...
动物叫...

2.方法重写

子类不仅仅可以继承父类的属性和方法,也可以添加自己特有的属性和方法以体现出自己的个性。 例如:狗狗有别于其它动物,它会看大门。

代码如下:

public class Dog extends Animal {

    public void watchDoor(){
        System.out.println("正在看大门....");
    }

}


public class Test {

    public static void main(String[] args) {

        Animal dog = new Dog();
        Animal cat = new Cat();
        dog.bark();
        ((Dog) dog).watchDoor();
        cat.bark();
    }
}

运行结果:
一个动物诞生了...
一个动物诞生了...
动物叫...
正在看大门....
动物叫...

上面的例子中虽然体现了狗狗的特殊本领"看大门",但是我们发现狗狗和小猫的叫声并没有什么区别,并没有体现出各自叫声的特色。为了体现不同的动物有不同的叫声,我们就需要使用方法重写(Override)。

所谓方法重写(Override):是指子类重写了从父类继承过来的方法。

方法重写要遵循以下规则:

1)方法重写必须要在有继承关系的子类中;

2)重写方法的名字必须和父类方法名字相同,参数列表相同(参数顺序,个数,类型),方法返回类型相同或者是其子类;

3)重写方法的访问修饰符是可以允许有变化的,但是访问范围要大于等于父类的访问范围;

4)重写方法不能抛出比父类更大范围的异常;(后面章节做详细探讨)

现在我们重写小猫和小狗类,如下:

public class Cat extends Animal {

    @Override
    public void bark() {
        System.out.println("喵喵...");
    }
}

public class Dog extends Animal {

    @Override
    public void bark() {
        System.out.println("汪汪...");
    }

    public void watchDoor(){
        System.out.println("正在看大门....");
    }

}

public class Test {

    public static void main(String[] args) {

        Animal dog = new Dog();
        Animal cat = new Cat();
        dog.bark();
        ((Dog) dog).watchDoor();
        cat.bark();
    }
}

运行结果:
一个动物诞生了...
一个动物诞生了...
汪汪...
正在看大门....
喵喵...

上面使用的@Override注解表示该方法重写了父类的方法。该注解是一种检查性注解,用来检查重写方法是否符合以上规定的重写规则。

小结:

1)继承是指子类继承了父类的属性的方法。

2)继承的好处是提高了代码的可复用性。

3)Java只允许单个继承,也就是说一个类只能有一个父类,不显式声明父类的情况下,默认继承自Object.

4)子类也可以添加自己特有的属性和方法,以体现个性。

5)子类也可以重写从父类继承过来的方法,重写的目的也是为了体现子类的个性。