首页 > 编程笔记

什么是继承,Java继承快速入门

在 Java 开发中,不少情况下会遇到类的继承,下面我们就来了解一下什么是类的继承。

假设定义了一个 Cat 类,那么在这个类下还可以继续创建一个类,这个类会继承 Cat 类的所有特点,同时拥有一些自己独特的特点,我们将这个类称为子类,原本的 Cat 类可以被称为父类。

我们根据以往的做法,在一个新的文件中创建一个新的类,名称为 SmallCat,中文名为“小猫”,我们可以形象地把它理解为 Cat 类的儿子。Java 的继承由关键字 extends 来实现,继承的基本语法如下:
修饰符 class 类名 extends 父类名
{
    //子类中需要定义的属性和方法
}
Java 的继承有如下特点:
下面我们来看一个例子,新建一个类 SmallCat,创建完后的程序编辑窗口如下:
public class SmallCat {

}
我们需要在这个类的后面写上继承父类的语法,写好的继承如下:
public class SmallCat extends Cat{

}
程序没有任何报错,说明我们写对了。由于这个类已经继承了父类 Cat 的所有特点,其中 Cat 类是我们之前已经编写好的类,而不是新建的。这里同时对新创建的子类中的内容进行补充,在子类中添加 neweat() 方法,这个方法和父类中的任何方法都不相同,因此这个方法可以视为对父类中方法的补充和扩展。

编写子类的代码如下:
public class SmallCat extends Cat{
   public void neweat()
   {
        System.out.println("小猫的儿子小猫开始吃饭了\n");
   }
}
然后改写主类中的代码,实例化属于 SmallCat 的对象 cat2:
public class Main {

    public static void main(String[] args) {
        System.out.println("这是我们主类中的主方法,程序先从这里开始执行\n");
        Cat cat1=new Cat();//这里创建一个Cat类中的对象cat1
        cat1.name="小花";  //给cat1命名
        cat1.age=12;       //给cat1添加年龄
        cat1.color="蓝色"; //给cat1添加毛色
        cat1.saycolor();   //执行刚刚在Cat类中所定义的方法
        cat1.sayage();
        cat1.eat();
        //开始创建小猫的第二个对象,由子类SmallCat进行实例化
        SmallCat cat2=new SmallCat();
        cat2.name="小花的儿子";//由于子类继承了父类所有的属性和方法,因此我们也可以对父类的属性和方法进行改写
        cat2.age=4;
        cat2.color="蓝色";
        cat2.saycolor();//执行刚刚在Cat类中所定义的方法
        cat2.sayage();
        cat2.eat();
        cat2.neweat();  //子类中额外的方法
    }
}
输出结果为:

小猫小花的颜色是蓝色
小猫小花的年龄是12
小猫小花正在吃东西
小猫小花的儿子的颜色是蓝色
小猫小花的儿子的年龄是4
小猫小花的儿子正在吃东西
小猫的儿子小猫开始吃饭了

我们可以从这个结果中看到,由子类所生成的对象可以借用父类中所有的属性和方法,同时扩展属于自己的方法。

当然,也可以不局限于扩展父类的方法,直接改写父类的方法进行方法的重载。重新编写子类的代码如下:
public class SmallCat extends Cat{
    public void eat()
    {
        System.out.println("小猫吃肉肉");

    }

   public void neweat()
   {
        System.out.println("小猫的儿子小猫开始吃饭了\n");
   }
}
我们重新写了一个 eat() 方法,只是这个方法和父类的 eat() 方法中的内容有所不同,方法重写也被称为方法覆盖。由于我们已经把父类中的方法进行了改写,因此凡是由子类所创建出来的对象,这个对象一旦调用 eat() 方法,只会调用已经被我们所重写的子类中的 eat() 方法,而不会执行父类中的 eat() 方法。我们不改动主类中的代码,单击“运行”之后,来看看运行的结果:

小猫小花的颜色是蓝色
小猫小花的年龄是12
小猫小花正在吃东西
小猫小花的儿子的颜色是蓝色
小猫小花的儿子的年龄是4
小猫吃肉肉
小猫的儿子小猫开始吃饭了

十分明显,代码中的 cat2.eat() 方法因为已经在子类中被重写了,所以自然就只会调用已经被重写的 eat() 方法,而不是调用父类中原本的 eat() 方法。最后 cat2.eat() 输出的是“小猫吃肉肉”,而不是“小猫小花的儿子正在吃东西”。

学到这里,读者应该已经了解到继承是怎么使用的了。

推荐阅读