美文网首页
JAVA 多态

JAVA 多态

作者: Coding_530 | 来源:发表于2018-04-19 22:45 被阅读13次
    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 多态

          本文链接:https://www.haomeiwen.com/subject/kpggkftx.html