语言是为了解决人类世界各种各样的问题的,而java面向对象的特性是为了更好的贴近生活。
所以,每当遇到有点容易混淆的概念的时候,我总会尽力的思索,大牛前辈们在发明这些个东西的时候在生活中到底遭遇了什么样现实问题,想明白这一点,这些概念就记得基本差不多了。
先谈谈对继承的理解。
为何要“继承”?
好,先看一个例子。
今天小明要去买点水果吃,很明确,买个柚子。
所以放在java世界里面就是,“人”类之中有个方法叫做“吃”,“人”类有名字,现在有一个实体,他的名字叫小明,吃的是一“类”水果,叫做“柚子”。
class people {
String name;
void eat (柚子 c ){
System.out.print(name+"吃掉了"+c.name);
}
people(String name){
this.name=name;
}
}
class 柚子{
String name;
}
public class example{
public static void main (String[] args){
people b=new people("小明");
柚子 c=new 柚子();
c.name="柚子";
b.eat(c);
}
}
小明确确实实吃到了柚子,但是他又想吃苹果。在java里,传“柚子”进去可以吃到苹果吗?哪怕你令柚子的名字叫做苹果,那也是柚子啊!所以我们必须新创建一个类,叫做苹果的类。
class 苹果{
String name;
}
小明想吃苹果,咋办?对!把eat方法的柚子类直接改成苹果,也可以得到一样的效果,但是我说小明喜欢一口柚子一口苹果,大人都是全都要的,小孩子才做选择。
所以,咱们可以方法重载,再写一个eat方法,以致于传入不同的类都可以实现。
class people {
String name;
void eat (柚子 c ){
System.out.print(name+"吃掉了"+c.name);
}
void eat (苹果 c ){
System.out.print(name+"吃掉了"+c.name);
}
people(String name){
this.name=name;
}
}
class 柚子{
String name;
}
class 苹果{
String name;
}
public class example{
public static void main (String[] args){
people b=new people("小明");
柚子 c=new 柚子();
苹果 d=new 苹果();
c.name="柚子";
d.name="苹果";
b.eat(c);
b.eat(d);
}
}
然后呢?
小明发工资啦!还想吃哈密瓜,火龙果,等等一堆的水果。
你写!你接着写重载方法呀,写不死你!
我最近感触最深的就是,程序员是又勤劳又懒惰的。
他们可以肝到头秃,找bug找到两眼发昏,但是你说让他干重复的事情,干一大堆相同类似的事情(诸如不断的重载相似的方法),他们是不会干的!!!
“懒惰”是第一生产力(狗头保命)!!!
所以呢?
大家魂牵梦萦的初高中时代,老师们总会在讲到相似的知识点的时候停顿一下,敲敲黑板,:“注意归纳总结!!!”
归纳总结,在java里面也存在,由总结的类推演出有个性的类,这!便叫继承!
extends!!!这是他的关键字。
小明不是要吃水果吗?
行!今儿让你吃个够!
无疑,水果是一个更加抽象经过总结的类!
所以,“儿子”继承“父亲”。
于是有。
class fruit {
String name ;
}
class peach extends fruit {
}
我们来看看好处在哪吧!你说方便了就是方便了?实践是检验真理的唯一标准(这也是为啥我想学计算机编程的原因,这玩意随时随地都可以动手检验一下,嗷!)
class people {
String name;
void eat (fruit c ){
System.out.print(name+"吃掉了"+c.name);
}
people(String name){
this.name=name;
}
}
class fruit{
String name;
}
class 柚子 extends fruit{
}
class 苹果 extends fruit{
}
public class eatways{
public static void main (String[] args){
people b=new people("小明");
柚子 c=new 柚子();
苹果 d=new 苹果();
c.name="柚子";
d.name="苹果";
b.eat(c);
b.eat(d);
}
}
你看,一个方法,同时解决了吃苹果跟吃柚子的问题,当然还可以想peach!!!无需重载!!!
只需要创建一个peach类,继承fruit,这样子想吃多少都可以,刘关张直接在java世界里结义了!!!
继承继承,当然是子承父业!!!父亲有的,儿子肯定有,那么?儿子必须事事听父亲的吗?能不能有点自己的主见呢?
当然,你可以在子类里面新增各种不同的成员变量跟成员方法,吃桃子削皮,吃橘子剥皮,自然不一样。
这其中还有些小细节没讲,但是,现在我们已经知道了,有一种东西,叫做继承,并且体验到了它的美妙,这就够了。
明日,咱们再谈这些小细节。毕竟我也是小白,肯定有不完善和错误,恳请大佬不吝指出。但是边学边写,学学半,我想这样子,才能更好的进步。
总结:继承,可以减少重载,兼容未来!!!