面向对象之多态--判断类型

来源:互联网 发布:手机管理淘宝商品 编辑:程序博客网 时间:2024/06/01 08:12


本文章只是了解 

instanceof   关键字



上代码:

public class Hello {static void add(U u){u.show();//向下转型K k = (K)u;k.show();}public static void main(String args[]) {U u = new T();u.show();//调用静态方法add(传入U类或子类的对象)add(new T());}}class U{public void show(){System.out.println("U类的show方法");}}class T extends U{public void show(){System.out.println("T类重写的show方法");}}class K extends U{public void show(){System.out.println("K类重写的show方法");}}

结果:     




由结果可知代码编译没问题,在运行出现了异常(错误):

我在静态方法add()中传入了一个T类型的引用,这样语法也没错误!因为T类继承了U类

不过在运行

K  k = (K)u;       这句代码出现了错误!

因为刚才传入的是T类型的引用,T类又和K类又没存在关系,所以出现了类型转型失败!


怎么判断传入的引用呢?     在原代码中添加判断


public class Hello {static void add(U u){u.show();//判断传入的引用是否为K类型if(u instanceof K){//向下转型K k = (K)u;k.show();}else{System.out.println("u不为K类型");}}public static void main(String args[]) {U u = new T();u.show();//调用静态方法add(传入U类或子类的对象)add(new T());}}class U{public void show(){System.out.println("U类的show方法");}}class T extends U{public void show(){System.out.println("T类重写的show方法");}}class K extends U{public void show(){System.out.println("K类重写的show方法");}}


结果




0 0