纸上谈兵

作为Java面向对象三大特性中的榜眼级人物,继承的重要性不言而喻。继承机制的优点是可以提高代码的复用性,以及继承之后才会衍生出方法的覆盖和多态机制。那么什么是继承呢?简单来说,类似于父与子之间的香火传承。父类中的属性和方***继承给子类,就像孩子会继承父亲的姓氏。可子类不能访问父类的私有属性和方法,就像父亲的银行密码暂时是不会告诉小孩子的。但是父类却可以通过公共接口方法来让子类访问一部分私有属性及方法,就像孩子可以通过问父亲要微信红包来获取零花钱…

一、基本概述

(1)超类、子类

超类:又称父类、基类。字面上理解就是扮演父亲的角色,父类的属性和方法都会继承给子类。注意:父类并不一定优于子类,不一定比子类拥有更多的功能,事实上往往子类拥有的功能更多。

子类:又称派生类、孩子类。继承了父类的全部属性和方法。但父类的私有属性和方法不能访问。一般通过父类的公共接口方法来访问私有属性和方法。

(2)extends关键字

子类通过extends关键字继承父类。
写法如下:
public class 子类名 extends 父类名{

}
例:
public class Cat extends Animals{

}

(3)super关键字(简述)

1.定义:与this关键字不同,super关键字不是一个对象的引用,不能将值super赋给另一个对象变量。它只是一个指示编译器调用超类方法的特殊关键字。

2.作用:1.调用超类的方法;2.调用超类的构造器,调用构造器的语句只能作为另一个构造器的第一条语句出现。

(4)方法覆盖(简述)

方法覆盖又叫重写方法。因为父类中会有一些方法对于子类来说不太适用,满足不了子类的需要的功能,所以子类可以通过覆盖父类中的方法来实现子类想要的功能。但是子类重写的方法的权限限制不能比父类更严格,例如:对于父类用public修饰的方法,子类重写时不能用private修饰此方法。

(5)多态(简述)

在Java程序设计语言中,对象变量是多态的。字面理解就是一个对象可以具有多个状态。如:一个Animals类型的变量,可以引用Animal类型的对象,也可以引用Animals类的任何一个子类的对象(Cat、Dog等)。

(5)注意/理解

1.与C++的多继承不同,Java是单继承,不允许出现public Cat extends Animals,Biology{…},但是C++允许这种形式的表达。

2.虽然 Java 中不支持多继承,但有的时候会产生间接继承的效果,例如:class Cat extends Animals{…},class Animals extends Biology{…}。也就是说,Cat直接继承 Animals,其实 Cat还间接继承Biology。

3.若类没有显示的继承一个类,那么这个类默认继承 Object类,Object类是 Java语言提供的根类。也就是说,一个对象与生俱来就有 Object类型中所有的特征。

二、代码示例

(1)父类Animals
public class Animals {//父类/超类/基类
    private String name;
    private int age;

    public Animals(String name,int age){//父类构造器
        this.name=name;
        this.age=age;
        return;
    }

    //子类不能直接访问父类的私有属性和方法
    public String getName(){//通过公共方法让子类可以访问父类的私有属性
        return name;
    }

    public int getAge(){
        return age;
    }

    public void println(){
        System.out.print("I am a animal !");
        System.out.println("My name is "+this.getName()+" and age is "+this.getAge()+".");
    }
}

(2)子类Cat
public class Cat extends Animals{//Animals的子类/派生类/孩子类
    private int code;

    public Cat(String name,int age,int code){//子类构造器
        super(name,age);//通过super关键字调用父类构造器,必须写在子类构造器第一行
        this.code=code;
        return;
    }

    public void println(){//子类可以重写父类中的方法,但是其权限限制不能比父类更严格
        System.out.print("I am a cat !");

        //通过super关键字调用父类方法
        System.out.print("My name is "+super.getName());

        //通过this关键字调用父类方法
        System.out.println(" and age is "+this.getAge()+".");
        return;
    }
}

(3)测试类Test
public class Test {
    public static void main(String[] args){
        Animals animal=new Animals("Jack",18);//实例化父类对象
        animal.println();
        Cat cat=new Cat("Tom",20,1);//实例化子类对象
        cat.println();
        Animals cats=new Cat("Peter",23,3);//多态,父类类型实例化子类对象
        cats.println();
    }
}

(4)运行结果

尾言

有关上文中提到的super关键字、方法覆盖和多态等知识,小编还在总结中,敬请期待咯!

渣娃小编正在疯狂学习Java,如果你对渣娃也很热爱,那就请让我们在成为渣娃的道路上一起努力。
奔跑吧,渣娃们!

小小推荐

撕烂数据爆锤算法系列:
单链表
循环链表
内排序之插入算法
内排序之交换算法
广度、深度优先搜索例题之炸弹人

程序人生系列:
大一总结:一路走来,从迷茫到渴望

感谢阅览,希望大家多多
点赞、收藏、转发
一波三连
拜~~~