📅  最后修改于: 2020-03-24 05:07:35             🧑  作者: Mango
instanceof是一个关键字,用于检查引用变量是否包含给定类型的对象引用。
以下是一个Java程序,用于显示instanceof的不同行为。
// Java 用于显示instanceof的不同行为
class Parent { }
class Child extends Parent { }
class Test
{
public static void main(String[] args)
{
Child cobj = new Child();
// 简单的例子
if (cobj instanceof Child)
System.out.println("cobj是Child的对象");
else
System.out.println("cobj不是Child的对象");
// instanceof对父类也返回真
if (cobj instanceof Parent)
System.out.println("cobj是Parent的对象");
else
System.out.println("cobj不是Parent的对象");
// instanceof 对所有祖先类返回true
if (cobj instanceof Object)
System.out.println("cobj是Object的对象");
else
System.out.println("cobj不是Object的对象");
}
}
输出:
cobj是Child的对象
cobj是Parent的对象
cobj是Object的对象
instanceof为null返回false
// Java展示instanceof为null返回false
class Test { }
class Main
{
public static void main(String[] args)
{
Test tobj = null;
// 一个简单的例子
if (tobj instanceof Test)
System.out.println("tobj是Test的对象");
else
System.out.println("tobj不是Test的对象");
}
}
输出:
tobj不是Test的对象
父类对象不是子类的实例
// Java展示父类对象不是子类的实例
class Parent { }
class Child extends Parent { }
class Test
{
public static void main(String[] args)
{
Parent pobj = new Parent();
if (pobj instanceof Child)
System.out.println("pobj是Child的对象");
else
System.out.println("pobj不是Child的对象");
}
}
输出:
pobj不是Child的对象
引用子类对象的父引用是子类的一个实例
// Java引用子类对象的父引用是子类的一个实例
class Parent { }
class Child extends Parent { }
class Test
{
public static void main(String[] args)
{
Parent cobj = new Child();
if (cobj instanceof Child)
System.out.println("cob是Child的实例");
else
System.out.println("cob不是Child的实例");
}
}
输出:
cob是Child的实例
当父类型的引用,引用子对象时,将访问父类数据成员。我们可以使用类型转换访问子数据成员。
语法:
(((child_class_name)Parent_Reference_variable).func.name()
当我们进行类型转换时,检查类型转换是否有效总是一个好主意。instanceof在这里帮助了我们。我们总是可以首先使用instancef检查有效性,然后进行类型转换。
// Java使用instancef检查有效性,然后进行类型转换
class Parent
{
int value = 1000;
}
class Child extends Parent
{
int value = 10;
}
// 测试代码
class Test
{
public static void main(String[] args)
{
Parent cobj = new Child();
Parent par = cobj;
// 使用instanceof,在类型转换之前检查par的有效性
if (par instanceof Child)
{
System.out.println("数据从 " +
"父类引用被访问 " +
((Child)par).value);
}
}
}
输出:
数据从 父类引用被访问 10