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();
}
}
};
发生向下转型时要增加验证,避免出现异常。
程序开发中不要去继承一个已经实现好的类,要继承抽象类实现接口
本文探讨了Java中使用instanceof关键字判断对象类型的机制,通过实例化不同类并进行多态性方法调用,展示了Java面向对象编程的特性。
566

被折叠的 条评论
为什么被折叠?



