Java基础——继承

继承

继承是Java的一种机制,字面体现其中存在父子关系(IS-A)。在面向对象的编程思想中,可以形象的理解为苹果作为一种水果,它继承了水果的所有属性。

在Java编程中,我们可以创建父类构建基础属性和方法,通过继承重复使用父类的属性和方法,同时子类可以扩展新的属性和方法,还可以重写父类的方法。这样即提高了代码的重用,又保证了方法的多态。不过,Java中子类只能继承一个父类,这样也是为了降低复杂度,避免多继承造成的冲突,产生混乱。(PS:需要多继承时,可以通过接口实现。)

通过以下代码示例体会继承:

Java基础——继承_第1张图片

父类

package edu.droy.study.parents;

/**
 * @Author : Droy
 * @Date : 16:02 2018-9-29
 * @Description :父类定义带餐构造函数,函数makeNoise.
 */
public class AnimalParent {

    public String voice;

    public AnimalParent(String voice){
        this.voice = voice;
        System.out.println("parent>cons>"+this.voice);
    }

    public void makeNoise(){
        System.out.println("parent>"+voice);
    }
}

子类1

package edu.droy.study.subs;

import edu.droy.study.parents.AnimalParent;

/**
 * @Author : Droy
 * @Date : 16:13 2018-9-29
 * @Description :继承并重写父类makeNoise函数,使用super调用父类makeNoise函数.
 */
public class AnimalDog extends AnimalParent {

    private String voice;

    public AnimalDog(String voice){
        super(voice);
        this.voice=voice;
    }

    @Override
    public void makeNoise(){
        System.out.println("dog>"+voice);
        super.makeNoise();
    }

}

子类2

package edu.droy.study.subs;

import edu.droy.study.parents.AnimalParent;

/**
 * @Author : Droy
 * @Date : 16:07 2018-9-29
 * @Description :继承并重写makeNoise函数.
 */
public class AnimalPig extends AnimalParent {

    private String voice;

    public AnimalPig(String voice){
        super(voice);
        this.voice = voice;
    }

    @Override
    public void makeNoise(){
        System.out.println("pig>"+voice);
    }
}

子类3

package edu.droy.study.subs;

import edu.droy.study.parents.AnimalParent;

/**
 * @Author : Droy
 * @Date : 16:21 2018-9-29
 * @Description :单纯继承父类.
 */
public class AnimalParentSub extends AnimalParent {

    private String voice;

    public AnimalParentSub(String voice) {
        super(voice);
        this.voice = voice;
    }

}

执行

package edu.droy.study.mains;

import edu.droy.study.subs.AnimalDog;
import edu.droy.study.subs.AnimalParentSub;
import edu.droy.study.subs.AnimalPig;

/**
 * @Author : Droy
 * @Date : 16:23 2018-9-29
 * @Description :执行子类,查看具体效果.
 */
public class AnimalMain {

    public static void main(String[] args) {
        AnimalPig pig = new AnimalPig("main>oink...");
        pig.makeNoise();

        AnimalDog dog = new AnimalDog("main>whool...");
        dog.makeNoise();

        AnimalParentSub parentSub = new AnimalParentSub("main>sub...");
        parentSub.makeNoise();
    }

}

执行以上代码我们可以清楚的认识到Java中继承的基础过程。

思考篇

  1. @Override注解不必须,但是建议书写,可以帮助我们检查重写方法是否正确,错误时会抛出异常提示。
  2. 当父类存在带参构造函数时,子类应在构造函数第一行书写super(param1…)。
  3. 重写与重载的区别,就看函数的参数是否相同,相同则为重写,不同(类型、数量)就是重载。典型重载就是多种构造函数。
  4. 多态,多种形态,一个方法实现多种效果,继承里的重写,接口里的实现。

你可能感兴趣的:(java基础)