A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 武汉分校-小舞 于 2016-9-13 11:30 编辑

【趣味Java】面向对象五(上篇)

剧情回顾
上一集说到了,继承。什么是继承,继承就是大类(父类),分为多个小类(子类),而这些个小类都具备一些相同的属性和方法,这些共同点都是来自于父类,那么这就继承的大思想
然后还讲解了一子类可以直接调用父类公有的方法和属性,父类私有的方法和属性不能调用。
顺便给个彩蛋,如过点招的时候这么跟面试官总结继承,面试官肯定会很青睐于你的回答~~~~~
本集剧情:
关于继承中子类父类的构造方法:
什么是继承中的构造?上一集提到了子类可以使用父类的共有的方法和属性?那么构造呢?构造方法也是方法啊,怎么使用呢?什么时候使用呢?
记得第一集中提到了一点么
需要一个健康完整的人类诞生要怎么办??
需要一个全参数的构造方法,在方法里面做赋值操作,在创建对象的时候进行调用。
看下面代码第一集剧情回顾
这样我们就有一个完整的人类了是吧,
好那么我们现在写一个关于继承的人类的代码
子类继承父类,老生常谈了..........................
下面我们来造人~~~嘿嘿嘿
我就问这科学么???怎么可能在诞生之后再决定性别和肤色????
你么肯定会说:那就特么调用代参构造啊,你不是讲过么,不是在父类中写了代参构造么,用呗!!
好那么我们来试试:
报错了,看到没!!!
错误信息大概在说:对不起,没有这个构造方法(强行翻译一波~~~
父类中不是有么??为什么不能用,不是说了只要不是私有就可以么??
那么在这里告诉你,构造方法不能被继承!!!!!
那么怎么办?
我们来分析:刚才造人的代码看我红色圈圈的地方
这是在调用什么??废话当然是空参数的构造
你们肯定会问:这个空参数构造在哪呢
明明什么都没有啊???
之前课程中其实有学到,没有参数的构造方法是默认的,意思你不写系统也会帮你加上去
我们来看看系统默认的构造是怎么写的(默认还有个意思就必须有的!!)
默认的空参数构造你们都知道但是红色圈圈里面的是啥?
super叫指向父类,跟this关键字有点类似,this是指向本类,
Super可以访问父类的成员(方法,属性)
那么super();是叫调用父类构造,那么调用的是什么构造呢
问:括号里面有参数么?
你们回答:没有
对的很棒,既然没有参数,肯定是调用的是空参数的构造,
那么问题来了,如何造一个健康的人???
问:造健康的人的逻辑在哪里??
你们回答:在父类的全参数构造里面啊
对头,那么怎么解决???既然有这个方法,那么我们直接用就可以啊!!
怎么用,既然是父类的构造,那么我们是不是可以通过super调用
(这一波的分析堪称完美,哈哈哈~~~·)
上面框框里面的参数哪里来?
你们回答:废话肯定是传进来啊
例如
上面的代码写的很清楚,需要参数需要从外面传进来,那么既然是传参肯定需要变量接收数据赋值符号=左边的就是参数列表,
完整代码:
这些代码写完之后就可以造一个健康的人了:
需要同学们思考的一些小问题:
如果在类中没有空参数构造
如下代码
那么我们子类还这样写,看下面代码
会出现什么问题呢?
整个测试类,测试下看看
再一次报错
此时的你们:不是说好了空参数是默认的么???怎么还是说找不到这个构造方法???
对的空参数构造是默认的但是你们忘记了一点:
上面圈圈的地方是在干嘛?上面讲了的是在调用父类空参,而且是默认的也就是必须有,
那么你的父类有空参数么???
你们回答:没有!!
是吧,没有,那肯定报错啊,你调用子类的空参数构造的同时,默认也是必须访问父类的空参数构造!!!一定要记住!!
而且当你自己写了代参构造忘记写空参构造的时候,那么系统默认就被你写的覆盖掉了,
一定要加上,要不就会报错!!!
在来一个需要注意的点:看下面代码
上面代码在super的上面写了句话然后运行
又错了,实力翻译一波:意思是super();必须在第一行,代码的第一行上面不能有任何东西,
也就是说,这个构造方法一调用,首先必须访问父类的构造
正确代码:
结果:
本集的主要知识点:
关于如何访问父类的构造
Super关键字
Super();必须在构造方法中代码的第一行
Super()是继承的关键所在,因为每次创建子类的对象的时候,调用子类构造,肯定会先访问父类的构造。
好了上面说了这么多,继承的体现其实不光是extends关键字,最大体现其实在于这个
super()必须调用父类构造有了这两个东西才叫继承。

1 个回复

倒序浏览
面向对象马上要大结局啦~期待吗~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马