多态------向上转型
发生条件: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”异常
来源:CSDN
作者:haha56呵呵
链接:https://blog.csdn.net/weixin_43343495/article/details/103486084