趣解Java的继承

来源:互联网 发布:c语言 c 知乎 编辑:程序博客网 时间:2024/05/16 09:49

如果你想学好java,那么继承绝对是必须理解的一部分。

在java中继承的关键字是extends,那么什么是继承呢?下面我们通过一个小例子来理解。

1.有一个父亲,他有三个爱好,分别是:爱打球,爱游泳,爱敲代码;

public class Father {public void likeBall(){System.out.println("爱打球!");}public void likeSwim(){System.out.println("爱游泳!");}private void likeCode(){System.out.println("爱敲代码!");}}

后来呢他生了一个儿子;

 public class Son extends Father{}


public class MainClass {public static void main(String[] args) {Son son = new Son();son.likeBall();son.likeSwim();;}}


然后大家发现他儿子也爱打球,爱游泳。但是不知道为什么不喜欢敲代码。这是为什么呢?

经过多方了解,才发现这个父亲是为生活所迫,才不得不爱上敲代码,因为敲代码才能挣到钱,才能给儿子买的起奶粉:C

由上可知:

(1)父类中private 修饰的私有变量和方法,子类是不能继承的。

(2)父类的构造方法是不能继承的

2.有一天父子俩一起去体检,体检单出来以后发现,父亲只有172cm 而 儿子则有182cm,这是为什么呢?

public class Father {public int height = 180;}


 public class Son extends Father{public int height = 183;}


public class MainClass {public static void main(String[] args) {Son son = new Son();System.out.println("身高:"+son.height);}}


最后运行的结果是:身高:183

这就是继承中,成员变量的隐藏。如果子类中定义了一个和父类中同名的成员变量,那么父类中的这个变量就会被隐藏。就像上面例子中的身高,在父亲和儿子的属性中都有,所以儿子的这个变量就覆盖了父亲的这个变量,也就是老人们常说的:青出于蓝而胜于蓝

在这里要注意一点,就是说父类的变量只是隐藏了,在内存中依旧占有一定的空间。总不能因为父亲生了个儿子,自己的身高就跟着儿子的身高去改变。谁是谁的身高呗。

3.因为家里住的是农村小三层楼房,但是由于以前没钱,所以上下楼都是走的木梯。有一天,父亲觉得这样太不安全了,就把木梯撤了,自己砌了一个水泥旋转楼梯,逼格瞬间高大上了。但是过了不久,儿子觉得每天上下楼爬楼梯太累了,就自己去找人在水泥梯旁边装了一个直上直下式小电梯。

public class Father {public void shangLou(){System.out.println("水泥梯");}}


 public class Son extends Father{public void shangLou(){System.out.println("电梯");}}


public class MainClass {public static void main(String[] args) {Son son = new Son();son.shangLou();}}


运行结果:电梯

同样是上楼,父亲想到的是造一个水泥梯子安全,儿子则认为电梯更省力。

这就是继承中方法的重写,这个跟上面说到的成员变量的隐藏不同,这里儿子完全抛开了他爹的那一套,自己去改善了一套方案。

这里需要注意的是:

(1)在方法的重写时,方法名和参数类型,已经参数数量必须一致,但凡有一点点的不一致,那就不是重写了。

(2)方法的返回值类型,也必须的一致

(3)方法的权限,只能扩大,但不能缩小

(4)不能重写被fina修饰的方法

(5)静态方法不能重写

那么,要想在重写过的方法里面调用父类的方法,那怎么办的?直接使用super去显式的调用就OK了。

这就是java的继承了,是不是很简单呀,工作快三年了,每次看都有收获。

0 0
原创粉丝点击