当前位置: 代码迷 >> 综合 >> 多态的另一表现------对象转型
  详细解决方案

多态的另一表现------对象转型

热度:113   发布时间:2023-09-06 12:40:55.0

多态------向上转型

发生条件:1、实例化对象
2、具有重写方法

package NoFirst;
class Message{public void print(){System.out.println("www.mldn.cn");}
}
class DataBaseMessage extends Message{public void print(){System.out.println("oracle连接数据库!");}
}
class WebServerMessage extends Message{public void print (){System.out.println("web服务器连接");}
}
public class ClassUpCast {public static void main(String args[]){fun(new DataBaseMessage());  fun(new WebServerMessage());}public static void fun(DataBaseMessage dbm){msg.print();}public static void fun(WebServerMessage wsm){msg.print();}
}

以上代码在在不转型的情况下当有巨多个子类继承主类时,那么就要写巨多个重载方法来满足调用
优点:当主类产生多个子类时解决产生对象后实现传入多个参数,避免在传入多个实例传入时需多个重载方法方法的问题(实现接受参或返回参的统一性)

package NoFirst;
class Message{public void print(){System.out.println("www.mldn.cn");}
}
class DataBaseMessage extends Message{public void print(){System.out.println("oracle连接数据库!");}
}
class WebServerMessage extends Message{public void print (){System.out.println("web服务器连接");}
}
public class ClassUpCast {public static void main(String args[]){fun(new DataBaseMessage());   //Message msg=new DataBaseMessage;fun(new WebServerMessage());//Message msg=new WebServerMessage;}public static void fun(Message msg){msg.print();}
}

向上转型

必须具有向上转型的前提
特点:不安全

package NoFirst;
class Person{public void ordinary(){System.out.println("A perosn can have meals、go sleep、work.");}public String run(){return "I can run";}
}
class SuperMan extends Person{public String run(){return "I can run too!";}public String fly(){return "I will fly to the sky.";}public String fire(){return "I can beat the intelligent beings!";}
}
public class JavaDemo {public static void main(String args[]){Person per = new SuperMan();//向上转型System.out.println(per.run());//向上转型//向上转型条件:必须先存在向上转型SuperMan man   = (SuperMan) per;System.out.println(man.fire());}
}

intanceof

作用:判断对象是否属于一个类
语法: 对象 intanceof 类名
返回值为boolean型

if(per intanceof person)
判断正确之后再值型操作否则会出现“classcastexception”异常

  相关解决方案