Java入门学习笔记-类的继承(extends)

964 阅读2分钟

继承是面向对象三大特征(封装、继承、多姿)之一,Java的继承具有单继承的特点,每个子类都只有一个直接父类,但不仅限于一个父类,这点在下文会提到。

继承的特点

Java继承的关键字是extends,实现继承的类被称为子类,被继承的称为父类,子类就是父类的特别版,类似于水果与苹果的关系,水果就是父类,而水果中的苹果便被称为子类。 Java里子类继承父类的语法格式如下:

修饰符 class Apple(子类) extends Fruit(父类)

子类继承了父类,可以获得父类的全部属性和方法,但值得注意的是:Java的子类不能获得父类的构造器

下面展示Fruit类的代码:

public class Fruit
{
    public String colour;
    public void info()
    {
        System.out.println("这个水果的颜色是"+colour);
    }
}
public class Apple extends Fruit
{
    public static void main(String[] args)
    {
        Apple a = new Apple();
        //Apple本身没有colour的属性,但因为Apple继承了Fruit,也可以访问Fruit的属性
        a.colour = "黄色";
        a.info();
    }
}

因为Java继承的单继承的特性,所以Java没有办法像C++在一个extends后加好几个父类,仅仅只有一个直接父类, 但可以通过叠加的方式间接继承。

class Fruit extends Plant

class Apple extends Fruit

上述Plant称为Apple的间接父类

重写父类的方法

子类继承了父类的全部属性和方法,作为特殊的一种父类,但有一种特殊情况:子类需要重写父类的方法。例如大部分人头发的颜色是黑色的,但有些人的头发却染成了黄色,我们不能再把黑色头发的属性加在黄色头发上,为此我们需要重写黄色头发类的方法。

下面程序先定义了一个Hair类:

public class Hair
{
    public void colour()
    {
        System.out.println("我的头发颜色是黑色的");
    }
}

下面又定义了一个YelloHair类,这个类extends了Hair类,我们需要重写YellowHair类的colour方法,程序如下:

public class YellowHair extends Hair
{
    public void colour()
    {
        System.out.println("我的头发颜色不是黑色的,是黄色的");
    }
    public static void main(String[] args)
    {
    YellowHair a = new YellowHair();
    a.colour();
    }
}

执行上面程序,YellowHair的colour不在调用Hair的colour,而是被重写,类似于优先级,重写的优先级大于继承的优先级

这种子类包含与父类同名方法的现象被称为方法重写,也被称为方法覆盖(Override)需要注意的是:覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个类方法,一个实例方法。