您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第6章:面向对象(高级)】_instanceof关键字
发布时间:2020-12-17 10:29:59编辑:雪饮阅读()
instance关键字用于判断一个实例是否属于某个类
class A{
public void print1(){
System.out.println("A->println1");
}
}
class B extends A{
public void print1(){
System.out.println("B->println1");
}
}
public class Hello{
public static void main(String args[]){
A a1=new B();
System.out.println((a1 instanceof A));
System.out.println((a1 instanceof B));
A a2=new A();
System.out.println((a2 instanceof A));
System.out.println((a2 instanceof B));
}
}
D:\>javac Hello.java
D:\>java Hello
true
true
true
false
多态应用存在向下转型问题(同级跨类)
在多态应用中,如果不同子类扩展了单独的方法而由于多态原理是默认向上转型,所以如果多态方法接收的对象即便是这个子类的实例,那么也必须向下转型到该子类才可以调用该子类的独立方法,但是这样会带来另外一个问题,假如这个拥有独立的类是c类,但是我向多态方法参数中传入的是B类呢?
class A{
public void print1(){
System.out.println("A->println1");
}
}
class B extends A{
public void print1(){
System.out.println("B->println1");
}
}
class C extends A{
public void print1(){
System.out.println("B->println1");
}
public void printc(){
System.out.println("c->printc");
}
}
public class Hello{
public static void main(String args[]){
polymorphic(new A());
polymorphic(new B());
polymorphic(new C());
}
public static void polymorphic(A obj){
obj.print1();
C cobj=(C)obj;
cobj.printc();
}
}
所以就报错了
D:\>java Hello
A->println1
Exception in thread "main" java.lang.ClassCastException: A cannot be cast to C
at Hello.polymorphic(Hello.java:27)
at Hello.main(Hello.java:21)
instanceof可以解决同级跨类问题
class A{
public void print1(){
System.out.println("A->println1");
}
}
class B extends A{
public void print1(){
System.out.println("B->println1");
}
public void printb(){
System.out.println("B->println1b");
}
}
class C extends A{
public void print1(){
System.out.println("c->println1");
}
public void printc(){
System.out.println("c->printc");
}
}
public class Hello{
public static void main(String args[]){
polymorphic(new A());
polymorphic(new B());
polymorphic(new C());
}
public static void polymorphic(A obj){
obj.print1();
if(obj instanceof C){
C cobj=(C)obj;
cobj.printc();
}
if(obj instanceof B){
B bobj=(B)obj;
bobj.printb();
}
}
}
关键字词:java,面向对象,instanceof