java中是不能通过多态访问子类特有的成员的,这时候可以使用instanceof和强制类型转换。
instanceof:
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。所以可以通过这种方法来访问子类特有的方法和字段:例子:
class A
{
public String type;
public void assignA(String type)
{
this.type = type;
}
public void printA()
{
System.out.println(type);
}
public void print()
{
System.out.println(type);
}
}
class B extends A{
public String type;
public void assignB(String type)
{
this.type= type;
}
public void printB()
{
System.out.println(type);
}
public void print()
{
System.out.println(type);
}
}
public class test{
public static void main(String []args)
{
A a= new A();
B b = new B();
A c = b;
a.assignA("A");
b.assignB("B");
a.print();
b.print();
c.print();
a.printA();
b.printA();
c.printA();
if(c instanceof B)//如果这里直接调用c.printB(),那么会报错
{
B tmp = (B)c;
tmp.printB();
}
}
}
- 在具体的判断输出的时候,一定要看清是否存在上溯造型,只有存在上溯造型的时候,才存在多态。