声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。
继承:
继承就是拥有
高效率的代码复用(在原有的代码基础上添加、升级称为新的功能)
Java只能单一继承
继承就是用有,继承了就拥有父类的一切。
继承关键字:本类 extends 父类
创建子类对象时,先创建父类对象,然后创建子类对象。
创建子类对象,先出父类后出子类,拿对象调用方法的时候永远先考虑子类方法,如果子类没有就调用父类。
重写:在继承之中,子类觉得父类方法过时或者有问题,可以在子类声明一个与父类一摸一样的方法。
Super关键字:
1.父类对象
2.选择父类构造器(必须写在构造器代码的第一行)
申请方式:
写上extends 父类 就拥有父类的一切,除了私有的属性方法。
私有的要在代码本类才可以访问。
例题1:
代码重复问题:
比如我们写一个游戏中的野怪类。
食人花:属性(名字、血条、攻击力)
方法(攻击、受到攻击)。
稻草人:属性(名字、血条、攻击力、行动速度)
方法(攻击、受到攻击)
鸡:属性(血条、行动速度、鸡肉品质)
方法(受到攻击)
在以上的怪物类中,我们可以发现它们拥有的属性和方法有重复的出现。
所以我们需要用到继承改善代码的重复率。
我们可以把野怪的共同属性和方法写在一个类中,通过继承在原有的属性和方法上进行添加属性和方法来构建出可移动、不可移动,在可移动怪物类中添加对用的属性和方法来构造怪可移动的怪物类(稻草人、僵尸)。不可移动的添加对应的属性方法构造对应的不可移动怪物类(食人树、食人花)。
继承的好处:
1.减少代码重复的问题(如果单独写稻草人、僵尸、食人花、食人树那就要一个个的重新书写,重新定制这些属性方法)
2.加快代码开发速度
3.代码结构清晰、细致。
例题2:
比如我们电脑的窗口,它们共同的属性(宽、高、x坐标、y坐标)
方法(改变大小、改变位置)
可以在父类的代码基础上派生出文本宽、按钮,在文本宽再派生出单行文本宽、多行文本宽。
在原有的代码基础上经过升级添加新的属性方法,创建出新的产品。
这样一来,既节省了开发时间,减少代码重复率,代码的结构清晰,细致。
例题3:我们创建一个手机类。
图1:先创建出手机最基本共有的属性、方法。
(打电话、响铃、接电话)
图2:
申请一个手机类,继承于手机1.
一旦继承就不用书写手机1的代码。
里面添加了发短信、接收接收短信。
在手机1的基础上增加新的功能成为新的产品。
图3:
在申请一个手机类,继承于手机2.
增加拨打长途电话时自动添加17951。
把之前的手机1的打电话方法重新覆盖掉。
重写:
只需要书写一个与收机1一摸一样的打电话方法就可以了。
在父类打电话方法不好用时,可以使用重写,覆盖掉父类的方法。
调用时先考虑子类,在考虑父类。(先调用手机3重新的打电话方法,没有的话才考虑父类的打电话方法)
Super关键字例题:
1.父类对象。
申请A、B、C类,B继承A,C继承B。
New C的话,它的调用方式是C调用B,B再调用A。
就近原则,父类是不知道有子类继承它。
- 选择父类构造器。
申请Test1、Test2类,里面书写一个构造器,Test2 继承与Test1.
new Test2构造器,打印的结果先出父类,再出子类。
报错原因:
图1:父类有参数构造器,应该给父类构造器传参。
图2:决解办法
添加super关键字,给父类传参。
Super(name);声明语句,声明使用父类有参数构造器构建对象。