您的位置:首页 > 编程语言 > Java开发

Java-面向对象(高级篇)--instanceof关键字

2016-10-14 20:50 302 查看
instanceof关键字

在Java中可以使用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 fun2()");
}
public void fun3(){
System.out.println("B-->public void fun3()");
}

}
public class InstanceofDemo
{
public static void main(String[] args){
A a1=new B();//向上转型
System.out.println("A a1=new B():"+(a1 instanceof A));
System.out.println("A a1=new B():"+(a1 instanceof B));
A a2=new A();//通过A类中的构造方法实例化本类对象
System.out.println("A a2=new B():"+(a2 instanceof A));
System.out.println("A a2=new B():"+(a2 instanceof B));

}
}


运行结果为:

A a1=new B():true
A a1=new B():true
A a2=new B():true
A a2=new B():false


从以上程序发现,通过子类实例化的对象同时也是子类和父类的实例,所以可以直接进行向上或者向下转型,但是如果直接使用了父类实例化本类对象,则一定就不在是子类实例了,所以还是不能转型的。在进行对象的向下转型前最好进行判断在进行相应操作。

【在向下转型前进行验证】

class A
{
public void fun1(){
System.out.println("A-->public void fun1()");
}
public void fun2(){
this.fun1();
}
}
class B extends A
{
//覆写A中的方法
public void fun1(){
System.out.println("B-->public void fun1()");
}
//子类中自己定义的方法
public void fun3(){
System.out.println("B-->poublic void fun3()");
}
}
class C extends A
{
public void fun1(){
System.out.println("C-->public void fun1()");
}
public void fun5(){
System.out.println("C-->public void fun3()");
}
}
public class PolDemo04
{
public static void main(String[] args){
fun(new B());//传递B类实例,产生向上转型
fun(new C());//传递C类实例,产生向上转型
}
public static void fun(A a){//接收父类对象
a.fun1();
if(a instanceof B){
B b=(B)a;//向下转型
b.fun3();//调用子类自己定义的方法
}
if(a instanceof C){
C c=(C)a;//向下转型
c.fun5();//调用子类自己定义的方法
}
}
}


运行结果:

B-->public void fun1()
B-->poublic void fun3()
C-->public void fun1()
C-->public void fun3()


在上面的fun()方法中因为要调用各个子类自己的方法,所以必须进行对象的向下转型,但是为了保证程序进行时不出现转型异常,所以在发生转型时进行检验,以保证程序的运行正常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息