多态性

2020-10-30  本文已影响0人  曾梦想仗剑天涯

多态性简介

对象向上转型(接受或返回参数的统一性)

    对象转型的处理属于多态性,而这一特性必须在继承性的基础上实现。

/**
  向上转型的主要特点在于,可以对参数进行统一的设计
*/
class Message {
  public void print() {
    System.out.println("********** Channel ************");
  }
}
class DataBaseMessage extends Message {
  public void print() {
    System.out.println("进行了databasse连接");
  }
}
class WebServerMessage extends Message {
  public void print() {
    System.out.println("进行了webservermessage连接");
  }
}
 public class JavaDemo {
  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();
  }
}

对象向下转型

    向下转型主要特点在于需要使用到一些子类自己特殊的定义处理。

class Person {
  public void print() {
    System.out.println("一个正常的人类");
  }
}
class SuperMan extends Person {
  public String fly() {
    return "飞";
  }
  public String fire() {
    return "喷火";
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    Person per = new SuperMan();  //向上转型
    SuperMan man = (SuperMan) per;  //向下转型
    System.out.println(man.fly());
    System.out.println(man.fire());
  }
}
//错误程序
Person per = new Person();  
SuperMan man = (SuperMan) per;  //向下转型

instanceof关键字

    通过分析来看,向下转型存在安全隐患,所以为了保证向下转型的正确性,往往需要在进行转型之前进行判断,判断某个实例是否是某个类的对象,这个就需要instanceof语法来实现。

Person per = new Person();
System.out.println(per instanceof Person);  //true
System.out.println(per instanceof SuperMan);  //false


Person per = new SuperMan();  //向上转型
System.out.println(per instanceof Person);  //true
System.out.println(per instanceof SuperMan);  //true


Person per = new SuperMan();  //向上转型
if(per instanceof SuperMan) {  
  SuperMan man = (SuperMan) per;
  System.out.println(man.fly());
  System.out.println(man.fire());
}
上一篇 下一篇

猜你喜欢

热点阅读