1. 继承
1)extends关键字 ,使用继承可以实现代码的重用,在java语言中,需要通过extends关键字实现类的继承。继承完成后,子类(Sub class)可以继承父类(Super class)的成员变量及成员方法,同时子类也可以定义自己的成员变量和成员方法。届时,子类将具有父类的成员及本类的成员。 需要注意的是,Java语言不支持多重继承,即:一个类只能继承一个父类,但一个父类可以有多个子类。
2)使用继承的好处:
① 继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
② 继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
③ 继承提供了软件复用功能,减小代码和数据的冗余度,大大增加程序的重用性。
④ 继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性
3)继承中构造器的调用顺序
① 子类构造器里面一定会调用父类构造器,默认调用父类的无参构造器
② 子类父类都不写构造器,同样会存在调用关系。
③ 调用父类构造器只能写在子类构造器第一行,不写时候,也默认是第一行。
④ 当在子类构造器指定调用了父类的有参构造器,则不会再去执行默认的调用无参构造器
4)super的用法
① super():用来调用父类无参构造器,一定在子类构造器第一行使用,可以不写的。
② super.属性,访问父类对象的属性
③ super.方法,调用父类的方法
2. 向上造型
一个子类的对象可以向上造型为父类的类型。即,定义父类型的引用可以指向子类的对象,但是通过父类的引用只能访问父类所定义的成员,而不能访问子类所扩展的部分。
父类型 变量 = new 子类();
向上造型是多态的一种体现,同时可以使程序更简单明了。
属性绑定到变量的类型,由变量类型决定访问哪个属性;
方法动态绑定到对象,由对象的类型决定访问哪个方法。
强转:
父类型 变量1 = new 子类();
子类型 变量2 = (子类型) 变量1;
强转对方法动态绑定到对象无影响,因为强转的是父类的引用,而实例是没变的,只是把实例当作另一个状态去看而已。但是强转对属性动态绑定到变量类型有影响。
/**
* 在俄罗斯方块游戏中,每次下落的方块是随机生成的,但是不能保证下次生成什么类型的方块,
* 所以,在获取方块时候,需要使用父类型作为方法的返回值类型。
*/
public static Tetromino getOntTetronino(){
int num = (int)(Math.random() * 7);
switch( num ){
case 0 : return new T(); break;
case 1 : return new O(); break;
case 2 : return new L(); break;
... ...
}
}
// 然后接收
public static void main(String[] args){
Tetromino tetro = getOntTetronino();
}
3. 方法的重写
重写(override):发生在两个类中,并且是子父类的关系,子类方法与父类方法签名相同,方法体不同。
注意:
1)重写方法被调用时,看对象
2)两同两小一大原则
2.1)两同:方法名同,参数列表同
2.2)两小:子类返回值类型小于等于父类的
2.2.1)返回值使用void和基本类型,必须相同
2.2.2)返回值是引用类型时,可以子类小于等于父类
2.3)一大:子类访问权限大于等于父类
重写的好处:
重写是对父类的功能的扩展,可用拥有父类的功能,还可以实现自己的功能,在实际开发过程中使用方便,同时也是代码结构清晰。
重写和重载的区别:
1)重写是发生在2个各类里面,且是字符类关系的2个类,重载是发生在一个类里的
2)冲写遵循的原则是运行期绑定,重载则是编译期绑定
3)重写必须方法名相同,参数列表相同;重载是方法名相同,参数列表必须不同。
本文出自 “永远年轻” 博客,请务必保留此出处http://kingkongzhao.blog.51cto.com/6319491/1654863
原文地址:http://kingkongzhao.blog.51cto.com/6319491/1654863