zoukankan      html  css  js  c++  java
  • 《Thing in java》上塑造型的笔记

    //: Music.java
    // Inheritance & upcasting
    
    class Note {
        private int value;
    
        private Note(int val) {
            value = val;
        }
    
        public static final Note
                middleC = new Note(0),
                cSharp = new Note(1),
                cFlat = new Note(2);
    } // Etc.
    
    class Instrument {
        public void play(Note n) {
            System.out.println("Instrument.play()");
        }
    }
    
    // Wind objects are instruments
    // because they have the same interface:
    class Wind extends Instrument {
        // Redefine interface method:
        public void play(Note n) {
            System.out.println("Wind.play()");
    
        }
    }
    
    public class Music {
        public static void tune(Instrument i) {
            // ...
            i.play(Note.middleC);
        }
    
        public static void main(String[] args) {
            Wind flute = new Wind();
            tune(flute); // Upcasting
        }
    } ///:~

    其中,方法 Music.tune()接收一个Instrument 句柄,同时也能接收从Instrument 衍生出来的所有东西。当一个Wind 句柄传递给 tune()的时候,就会出现这种情况。此时没有造型的必要。这样做是可以接受的;
    Instrument 里的接口必须存在于 Wind 中,因为Wind 是从Instrument 里继承得到的。从 Wind 向Instrument的上溯造型可能“缩小”那个接口,但不可能把它变得比 Instrument 的完整接口还要小。

  • 相关阅读:
    递归
    数据结构与算法-复杂度分析
    'latin-1' codec can't encode characters in position解决字符问题
    redis理解
    spring 嵌套事务问题
    Parameterized testing with any Python test framework
    分布式事务测试考虑点
    python orm / 表与model相互转换
    Python多线程、多进程
    JS运动
  • 原文地址:https://www.cnblogs.com/aotemanzhifu/p/9192409.html
Copyright © 2011-2022 走看看