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() 关键字,请移步到下篇文章。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘小蓝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值