JAVA 多态

abstract class Message{
       abstract void send();
 }
class TextMsg extends Message{
    public void send(){  //文本消息}
  }
class CustomMsg extends Message{
    public void send(){   //自定义消息}
}
public class Main{
    public static void main(String[] args){
        Main m = new Main();
                // Message t = new TextMsg(); 父类的引用指向了子类
        m.send(new TextMsg());
                // Message c= new CustomMsg();
        m.send(new CustomMsg());
    }

      // TextMsg、CustomMsg
      public void send(Message people){
        people.send();
    }
}
父类(抽象类,接口)的引用(指向了/ 接收了)子类对象。
不同子类可以对同一消息作出响应。(覆盖,重写)
前提是 类与类之间必须存在关系(继承,实现)。

弊端:只能调用父类已有的方法,不能预先使用子类中定义的特有功能。
优点:如在聊天功能中消息类型是有很多种的,如:文本,图片,自定义。。。
          预先定义的程序可以运行后期程序的内容,增强了程序的扩展性
          就可以不用每次创建具体消息后,手动调用发送的方法了。

多态的注意事项:
                  对于成员函数:Fu f = new Zi(); f.method();
                  编译时期:看左边。因为方法是在父类中定义
                  运行时期:看右边。因为子类会覆盖父类的方法,

                  对于非私有的实例变量。
                  属于对象,堆中存储,每个具体类堆都是独立的

                  静态变量,静态方法。   属于类,方法区存储
                  编译和运行都看左边。


 转型:
            //文本消息向上转型为了消息
             Message m= new TextMsg(); //向上转型,级别升高

             //文本消息对象的父类引用m强制转换成了文本消息类型
              TextMsg  t = (TextMsg )m; //向下转型。级别降低
        

总结:多态的体现主要在覆盖重写、类型转换,增强了程序的扩展性。

你可能感兴趣的:(JAVA 多态)