JAVA中可以使用instanceof关键字判断一个对象到底是哪个类的实例
返回值是boolean类型
class A
{
public void fun1(){
System.out.println("A------->fun1()方法");
}
};
class B extends A
{
public void fun1(){ //覆写A类中的fun1方法
System.out.println("A------->fun1()方法");
}
public void fun2(){
System.out.println("B------->fun1()方法");
}
};
public class InstanceofDemo01{
public static void main(String args[]){
A a1=new B(); //发生向下转型
System.out.println("a1是否为A类的实例:"+(a1 instanceof A));
System.out.println("a1是否为B类的实例:"+(a1 instanceof B));
A a2=new A(); //通过A类实例化对象
System.out.println("a2是否为A类的实例:"+(a2 instanceof A));
System.out.println("a2是否为B类的实例:"+(a2 instanceof B));
}
};
class A
{
public void fun1(){
System.out.println("A------->fun1()方法");
}
};
class B extends A
{
public void fun1(){ //覆写A类中的fun1方法
System.out.println("A------->fun1()方法");
}
public void fun2(){
System.out.println("B------->fun2()方法");
}
};
class C extends A
{
public void fun1(){ //覆写A类中的fun1方法
System.out.println("A------->fun1()方法");
}
public void fun3(){
System.out.println("c------->fun3()方法");
}
};
public class InstanceofDemo02{
public static void main(String args[]){
}
};
设计一个程序 可以调用B中的fun()2方法,C类中的fun()3方法,则程序需要改成
class A
{
public void fun1(){
System.out.println("A------->fun1()方法");
}
};
class B extends A
{
public void fun1(){ //覆写A类中的fun1方法
System.out.println("A------->fun1()方法");
}
public void fun2(){
System.out.println("B------->fun2()方法");
}
};
class C extends A
{
public void fun1(){ //覆写A类中的fun1方法
System.out.println("A------->fun1()方法");
}
public void fun3(){
System.out.println("c------->fun3()方法");
}
};
public class InstanceofDemo03{
public static void main(String args[]){
fun(new B());
fun(new C());
}
public static void fun(A a){
a.fun1();
if(a instanceof B){
B b=(B)a;
b.fun2();
}
if(a instanceof C){
C c=(C)a;
c.fun3();
}
}
};
发生向下转型时要增加验证,避免出现异常。
程序开发中不要去继承一个已经实现好的类,要继承抽象类实现接口