美文网首页
继承的定义与使用

继承的定义与使用

作者: 河神_6961 | 来源:发表于2017-08-07 23:29 被阅读0次

    面向对象的第二大特点就是继承:而继承的主要作用在于,在已有基础上继续进行功能的扩充。

    一. 继承问题的引出

    如果要想更好的解析继承的作用,下面按照之前所学习到的概念来定义两个类:人类、学生类。那么现在的定义效果如下:

    class Person {

    private String name ;

    private int age ;

    public void setName(String name) {

    this.name = name ;

    }

    public void setAge(int age) {

    this.age = age ;

    }

    public String getName() {

    return this.name ;

    }

    public int getAge() {

    return this.age ;

    }

    }

    class Student {

    private String name ;

    private int age ;

    private String school ;

    public void setName(String name) {

    this.name = name ;

    }

    public void setAge(int age) {

    this.age = age ;

    }

    public String getName() {

    return this.name ;

    }

    public int getAge() {

    return this.age ;

    }

    public void setSchool(String school) {

    this.school = school ;

    }

    public String getSchool() {

    return this.school ;

    }

    }

    发现Student类具备Person类中的所有属性,两个简单Java类中存在大量的重复内容。

    二. 继承的实现

    在Java之中继承使用extends关键字来进行实现,其定义的语法如下:

    ●继承关系:class 子类 extends 父类;

    |-子类在一些书上也被称为派生类;

    |-父类也被称为超类(Super Class)。

    继承可以进行父类功能的扩充,并且最重要的是可以重用父类中定义的方法。

    三. 继承使用限制

    虽然从本质上来讲继承子类可以对父类操作进行共享,但是从另外一个角度来说,继承本身也是存在有一些限制的。

    1. 子类对象在进行实例化前一定会首先实例化父类对象,默认调用父类的构造方法后,再调用子类的构造方法进行子类对象实例化。

    ●必须先有老子,才有后代;

    class Person {

    public Person() {

    System.out.println("*** Person类对象创建 ***") ;

    }

    }

    class Student extends Person {

    public Student() {

    //super() ;   // 此语句在无参时写与不写一样,有的时候一定得放在首行,类似于this()。

    System.out.println("*** Student类对象创建 ***") ;

    }

    }

    public class MeDemo {

    public static void main (String args[]) {

    new Student() ;  //进行子类对象实例化

    }

    }

    发现没有任何一条语句会明确调用父类构造,但是父类构造依然被执行了,所以就证明,子类对象的实例化一定会同时实例化其父类对象。

    但是同时需要注意的是,如果此时你的父类里面没有提供有无参构造,那么这个时候就必须使用super()明确的指明你的父类构造方法。

    2. Java中只允许单继承,不允许多继承;

    一个子类只能继承一个父类;

    范例: 错误继承方式

    class A {}

    class B {}

    class C extends A,B {}

    实际上这个时候的C类要同时继承A和B类的主要目的是为了同时拥有A和B类中的操作,所以为了实现这样的概念可以采用多层继承的形式完成。

    class A {}

    class B extends A {}

    class C extends B {}

    但是这个层不建议太多了。一般我们自己在建立类的时候,这些类的继承关系也就最多是三层。

    Tips:Java不允许多重继承,但是允许多层继承

    3. 在进行继承的时候,子类会继承父类的所有结构,但是这个时候需要注意的是,所有的非私有操作属于显式继承(可以直接调用),而所有的私有操作属于隐式继承(通过其他形式调用,例如:setter、getter)。

    此时父类中的属性的确被子类所继承了,但是发现子类能够使用的只是所有的非private操作(public),而所有的private操作肯定无法直接使用,所以称为隐式继承。

    总结:

    ①继承的语法以及继承的目的(扩展已有类的功能,使代码重用);

    ②子类对象的实例化流程:不管如何操作一定哟啊首先实例化父类对象,而后再实例化子类对象;

    ③继承的限制:不允许多重继承,只允许多层继承。

    相关文章

      网友评论

          本文标题:继承的定义与使用

          本文链接:https://www.haomeiwen.com/subject/yrezlxtx.html