面向对象(高级)————instanceof关键字
可以使用instanceof关键字判断一个对象到底是哪一个类的实例。
对象 instanceof 类 => 返回 boolean类型
instanceof 实例一:
class A{
public void fun1(){
System.out.println("A --> public void fun1(){}");
}
public void fun2(){
this.fun1();
}
};
class B extends A{
public void fun1(){
System.out.println("B --> public void fun1(){}");
}
public void fun3(){
System.out.println("C --> public void fun3(){}");
}
};
public class InstanceOfDemo01{
public static void main(String args[]){
A a1 = new B();//向上转型
System.out.println(a1 instanceof A);
System.out.println(a1 instanceof B);
A a2 = new A();//实例化对象
System.out.println(a2 instanceof A);
System.out.println(a2 instanceof B);
}
}
使用instanceof 可以做什么呢?
可以根据对象选择对象的调用方法:
class A{
public void fun1(){
System.out.println("A --> public void fun1(){}");
}
public void fun2(){
this.fun1();
}
};
class B extends A{
public void fun1(){
System.out.println("B --> public void fun1(){}");
}
public void fun3(){
System.out.println("B --> public void fun3(){}");
}
};
class C extends A{
public void fun1(){
System.out.println("C --> public void fun1(){}");
}
public void fun4(){
System.out.println("C --> public void fun3(){}");
}
};
public class InstaceofDemo02{
public static void main(String args[]){
fun(new B());
fun(new C());
}
public static void fun(A a){
if(a instanceof B){
a.fun3();
}
if(a instanceof C){
a.fun4();
}
}
}
在开发中一定要注意,对象向下转型操作最好增加验证,以保证转型时不会出现classCastException
如果现在增加新的子类,则肯定要修改fun()方法,这样一来程序就失去了灵活性,所以在程序的开发重点的设计应该放在父雷上,只要父类设计的足够合理,则开发肯定会非常方便。
而且在开发中一定要记住以下几点:
一个类一定不要继承一个已经实现好的类,而只能继承抽象类或者实现接口。