Java 继承(extends)

一、继承的引出

继承作为面向对象语言的三大特征之一,那么什么时候采用继承呢?

下面给出两个例子让大家明白继承的优点

Person类:

Java 继承(extends)_第1张图片

Student类: 

Java 继承(extends)_第2张图片

通过以上两个程序段的比较可以发现:有大量的代码段都是重复的,在没有了解继承之前,我们没有任何办法去减少这样重复的代码段,此时面对对象的思想就提出了继承的概念。

二、继承的概念

继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

Java 继承(extends)_第3张图片

上述图示中,Undergraduate和Graduate都继承了Student类,其中:Student类称为父类、基类或超类,Undergraduate和Graduate可以称为Student的 子类/派生类,继承之后,子类可以复用父类中成员,子类在实现时只需关心自己新增加的成员属性和方法即可。

三、继承的语法:

1.在Java中如果要表示类之间的继承关系,需要借助extends关键字,具体如下:

Java 继承(extends)_第4张图片

2.对上面的学生类以及子类的代码实现:

class Student {
    public String name;
    public int age;
    public  int id;
    public Student(String name,int age,int id) {
        this.name=name;
       this.age = age;
       this.id = id;
    }
    public void doHomework(){
        System.out.println(name+"在写作业");
    }

    public void doClass(){
        System.out.println(name+"在上课");
    }
}
//本科生类
class Undergraduate extends Student{
    public Undergraduate(String name,int age,int id) {
        super(name,age,id);
    }
    public void gePass() {
        System.out.println(name+"获得了学业证");
    }
}
//研究生
class Graduate extends Student{
    public Graduate(String name,int age,int id) {
        super(name,age,id);
    }
    public void doExam() {
        System.out.println(name+"在做研究");
    }
}

小结:

1.子类会将父类中的非私有的成员变量或者成员方法继承到子类当中;

2.子类继承父类之后,应该要添加一些父类没有的方法或者属性,否则去继承干什么

四、继承的使用

1.子类访问父类中的成员变量:

Java 继承(extends)_第5张图片

小结:

1.如果访问的成员变量子类有,就直接访问自己的;

2.如果访问的成员变量子类没有,就访问父类继承而来的,如果父类也没有,就报错;

3.如果访问的成员变量与父类的成员变量同名,优先访问自己的,如果要访问父类的通过super.父类变量名

2.子类访问父类中的成员方法: 

Java 继承(extends)_第6张图片  

小结:

1.当访问父类和子类不同名方法时,先去子类找,找到就访问,找不到去父类找,找到就访问,否则就编译报错

2.当访问父类和子类不同名方法时,如果子类中有就优先访问自己的,如果要访问父类的,通过super.父类方法名()

 3.子类构造方法: 

父子父子,有其父再有其子,即:子类对象构造时,需要先调用基类(父类)的构造方法,然后执行子类的构造方法。

注意:

1.若父类显示定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构造方法

2.如果父类构造方法是带有参数的,此时编译器不会再给子类生成默认的构造方法,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用为父类的成员变量初始化,否则编译失败

3.super只能在子类的构造方法中出现一次,并且不能和this同时出现

4.继承方式:在java中,不支持多继承,只支持多层继承,虽然支持多层继承,但是继承的层数太多反而变得复杂麻烦,此时继承就不适合了,就应该考虑重构了

五、super总结

1.super访问父类的成员变量:super.父类成员变量名;

2.super访问父类的成员方法:super.父类成员方法名(......);

3.super访问父类的构造方法:super(.....);

4.super的使用不能出现在静态的方法中

你可能感兴趣的:(java,java,开发语言)