美文网首页
java编程思想笔记--多态

java编程思想笔记--多态

作者: theo_NI | 来源:发表于2018-11-14 20:46 被阅读0次

    java编程思想笔记--多态

    在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。

    ​ --java编程思想

    • 个人理解

      多态由数据抽象(例如抽象类,接口),继承实现

    • 多态实现的必要条件:继承,重写或重载,向上引用

    • 核心关键词:多态的作用,向上转型,方法调用绑定,缺陷

    多态的作用

    • 消除类型间的耦合关系,提高代码复用性

      • 简单的说就是能少写代码,方便维护,逼格高

        /*背景介绍:wind,stringed,brass都继承于instrument,上面是不使用多态的编写方式,下面使用多态*/
        public class Music{
        
               public static void tune(Wind i){
        
                      i.play(Note.MIDDLE_C);
        
               }
        
            public static void tune(Stringed i){
        
                      i.play(Note.MIDDLE_C);
        
               }
        
            public static void tune(Brass i){
        
                      i.play(Note.MIDDLE_C);
        
               }
        
              
        
        }
        //====================================分割线===============================
        public class Music{
        
               public static void tune(Instrument i){
        
                      i.play(Note.MIDDLE_C);
        
               }
        
        }
        
        //上下两部分的代码量差距看到了吗?!!
        

    向上转型

    • 概念:对某个对象的引用视为对其基类型(他爸)的引用

      • 简单的说:做儿子的类想当老子,java说ok!!

        class Grain {
          public String toString() { return "Grain"; }
        }
        
        class Wheat extends Grain {
          public String toString() { return "Wheat"; }
        }
        
        class Mill {
          Grain process() { return new Grain(); }
        }
        
        class WheatMill extends Mill {
          Wheat process() { return new Wheat(); }
        }
        
        public class CovariantReturn {
          public static void main(String[] args) {
            Mill m = new Mill();
            Grain g = m.process();
            System.out.println(g);
            m = new WheatMill(); //向上转型!!
            g = m.process();
            System.out.println(g);
          }
        } 
        /* Output:
        Grain
        Wheat
        *///:~
        

    方法的绑定

    • 绑定的概念:一个方法调用同一个方法主体关联起来(没搞懂
    • 前期绑定:程序执行前进行绑定,面向过程语言的标配,例如C语言就只有前期绑定
    • 后期绑定:也称为动态绑定,运行时绑定,含义是程序运行是根据对象类型进行绑定
      • Java除了static方法和final方法外(private属于final),其他所有方法都是后期绑定
      • 备注:最后根据设计决定是否使用final,不要处于性能优化使用final,效果不明显
      • 绑定仅在方法中,与变量无关

    多态的不足

    • 无法覆盖私有方法,不法继承,也就无从多态
    • 类的变量与私有方法无法多态

    相关文章

      网友评论

          本文标题:java编程思想笔记--多态

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