1.多态
使用方法重载时,容易出现频繁修改代码,代码可拓展性、可维护性差,这时可以用多态来优化设计
多态:同一个引用类型,使用不同的实例而执行不同的操作。例如父类引用子类对象
如何使用多态:
使用继承;子类重写父类方法;父类引用子类
多态的优点:
1.可替换性。多态对已存在的代码具有可替换性。
2.可扩充性。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能
3.接口性。多态是超类通过方法签名,向子类提供了一个相同接口,由子类来完善或者覆盖它而实现的。
4.灵活性。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性。多态简化了对应用软件代码的编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。值得注意的是,多态并不能够解决提高执行速度的问题,因为它基于动态装在和地址的引用,或称动态绑定。
多态的特点:
属性或静态方法看左边声明的类型,左边如果是父类,调用的是父类的方法,如果是子类,调用的是子类方法
成员方法看右边类型,右边如果是父类,调用的是父类的方法,如果是子类,调用的是子类方法
2.引用类型转换
向上类型:
1.父类引用子类;
2.可见性:子类重写父类方法;
3.应用:多态
向下转型:
1.强制类型转换,父类转换子类
2.应用:类型的还原
3.instanceof运算符:
(1)判断一个对象是否属于一个类或者实现接口
(2)强制类型转换之前通过instanceof运算符检查对象的真实类型,可以避免类型转换异常,从而提高代码健壮性
/**
* 一个java文件中只能包含一个public类
* @author Administrator
*
*/
public class Ch03 {
public static void test(F f) {
f.t();
// C2 c2=(C2)f;
// c2.t2();
//在强转前可以先判断类型
if(f instanceof C2) {
//可能出现类型转换错误
((C2)f).t2();
} else {
System.out.println("该类型不是c2类型");
}
}
public static void main(String[] args) {
C1 c1=new C1();
test(c1);
}
}
class F{
public void t(){
}
}
class C1 extends F{
}
class C2 extends F{
public void t2() {
}
}