Java基础:继承 (诙谐的讲解,附案例与源码)

前言:

长江后浪推前浪,一代更比一代强。在生活中,继承在很多地方都有所体现,像家族继承,公司,事业继承
and so on .......... 
在 Java 里面的继承实际上也是类似,哪一个公司来说,父亲建立了一个公司,到 60 退休啦,把公司所
有的事务都交给了儿子(include money and beautful girls),儿子接手后,比它父亲干的还好,包括
在原来的基础上进行了新的改革,这就是一个生活中的例子。
从这个例子中我们可以 GET 到几个点:
1、儿子比父亲强(子类比父类更加强大)
2、儿子得到了父亲的公司和财产,但是是一切吗?
 (显然不是的,父亲的私房钱儿子能得到吗?(嘻嘻,还得留给媳妇儿)) 

从这里可以看出,子类只能继承父类中非私有的属性和方法,并且子类无法继承父类中的构造方法。

为什么要用继承?

在这里,用一个小案例进行解释: Dog 有 4 个属性: name,love,health,strain.
						   Cat 有 4 个属性: name,love,health,sex.

生成的代码就是这样的:
Dog.java:

package pat;

public class Dog {

    private String name;
    private int love;
    private int health;
    private String Strain;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public String getStrain() {
        return Strain;
    }

    public void setStrain(String strain) {
        Strain = strain;
    }

    public void print() {
        System.out.println(this.name + " " + this.love + " " + this.health + " " + this.Strain);
    }

}

Cat.java:

package pat;

public class Cat {

    private String name;
    private int love;
    private int health;
    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void print() {
        System.out.println(this.name + " " + this.love + " " + this.health + " " + this.sex);
    }

}

洞察力清晰的你一定发现了在两个类中有很多冗余重复的代码, name,love,health,包括各自的
setter(),getter()方法。想一下,如果我们有 100 个呢?是不是代码会重复的更多。
这时候怎么做呢?

既然你们两个都有重复的代码,那我把重复的代码放到同一个地方,然后这两个去调用不就行了,不同的地方我再自己写不就OK了。

是的,这就是继承的核心,当你理解这句话的时候再向上滑动滚轮,看一下前面所介绍的实际生活例子。

继承的代码是这样的:
Pet.java – 两个类中相同的地方

package pat;

public class Pet {
    private String name;
    private int love;
    private int health;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }
}

Dog.java – 继承 Pet.java

package pat;

public class Dog extends Pet{
    private String Strain;
    public String getStrain() {
        return Strain;
    }
    public void setStrain(String strain) {
        Strain = strain;
    }

    public void print() {
    	// 由于属性在 父类中是私有的(私房钱),是拿不到的,但是可以通过 getXxx()方法拿到
    	// 因为 getXxx() 和 setXxx() 方法都是 Public 的
        System.out.println(getName() + " " + getLove() + " " + getHealth() + " " + this.Strain);
    }

}

总结:

是不是通过继承后代码就少很多了呢,现在有两个类中有重复的,可能体现的不是太深刻,但是如果有
100 个呢,成千上万个呢,效果立马体现出来,实际上这就是大佬们常说的 重用,
当你不自觉的用上重用时,就里合格的程序员更近啦。
总的来说,继承有以下几个好处:
减少冗余(重复)
如果很多类的属性、方法、重复出现, 就可以用继承来减少冗余,提高效率。
严格继承: 是否能读通
.. 是一个 ..
子类是一个父类:

dog  是一个 Pet
张三 是一个 人
house 是一个 Pet(读不通)
另外:只有完全相同的属性和方法才可以提取到父类.

子类会继承父类中非私有的属性和方法,但是 privite 的属性和方法,包括构造方法子类是无法继承的。
但是父类中的构造方法可以通过 super(); 关键字进行调用父类中的构造方法.

关于 super() 和 this() 关键字,请移步到下篇文章。

猜你喜欢

转载自blog.csdn.net/qq_43619271/article/details/106228511
今日推荐