`

instanceof 的 测试 例子 ( 帮助理解 instance 用法 和 继承 的关键点 )

    博客分类:
  • JAVA
 
阅读更多
//AA是基类
class AA {
public void print() {
   System.out.println("AA's print()");
}
public void aMethod() {
   System.out.println("AA's aMethod()");
}
}

//BB是AA的子类
public class BB extends AA {
public void print() {
   System.out.println("BB's print()");
}
public void bMethod() {
   System.out.println("BB's bMethod()");
}
public static void main(String[] args) {
 
   System.out.println("***1***");
   AA aa = new AA();
   aa.print();
   System.out.println(aa instanceof BB);
   System.out.println(aa instanceof AA);
   aa.aMethod();
   //aa.bMethod(); 不能调用
   System.out.println();
 
   System.out.println("***2***");
   BB bb = new BB();
   bb.print();
   System.out.println(bb instanceof BB);
   System.out.println(bb instanceof AA);
   bb.aMethod();
   bb.bMethod();
   System.out.println();
 
   System.out.println("***3***");
   AA cc = (AA) bb;
   cc.print();
   System.out.println(cc instanceof BB);
   System.out.println(cc instanceof AA);
   cc.aMethod();
   //cc.bMethod(); 不能调用
   System.out.println();
 
   System.out.println("***4***");
   AA dd = new BB();
   dd.print();
   System.out.println(dd instanceof BB);
   System.out.println(dd instanceof AA);
   dd.aMethod();
   //dd.bMethod(); 不能调用
   System.out.println();
 
   System.out.println("***5***");
   cc = new AA();
   cc.print();
   System.out.println(cc instanceof BB);
   System.out.println(cc instanceof AA);
   cc.aMethod();
   System.out.println();
}
}

--------------------------------------------------------------------------------------------------
下面是测试结果:

***1***
AA's print()
false
true
AA's aMethod()

***2***
BB's print()
true
true
AA's aMethod()
BB's bMethod()

***3***
BB's print()
true
true
AA's aMethod()

***4***
BB's print()
true
true
AA's aMethod()

***5***
AA's print()
false
true
AA's aMethod()


----------------------------------------------------------------------------------------------------------------

小结:
1.instanceof 作用是测试它左边的对象是否是它右边的类的实例.
2.继承: A是基类,B是A的子类.如果A a=new B(); 则a只能调用A类的方法,如果B类有重写A类的方法,则a调用的方法其实是B类重写的方法.
3.继承: 由测试3和测试4结果一样,可以得知,AA cc = (AA) bb; (bb是BB引用类型)和 AA dd = new BB(); 中 cc 和 dd 性质是完全一样的. AA cc = (AA) bb; 相当于 AA cc = new BB();


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics