zoukankan      html  css  js  c++  java
  • java-interface

    /*The Method selection algorithm
     *Consider the function  call foo.bar(x1),
     where foo has static type TPrime, 
     and has dynamic type T1
     At compile time, the compiler verifies that TPrime 
     has a method that can handle T1. 
     It then records the signature of this method.
    
    *****Note: If there are multiple methods that can handle T1,
    the compiler records the "most specific" one. 
    For example, if T1=Dog, and TPrime has bar(Dog) and bar(Animal),
    it will record bar(Dog);
    
    *****
    At runtime, if foo's dynamic type overrides the recorded signature,
    use the overridden method.
    Otherwise, use TPrime's version of the method.
    
    
     * */
    public interface Animal {
        default void greet(Animal a) {
            print("hello animal");
        }
        default void sniff(Animal a) {
            print("sniff animal");
        }
        default void flatter(Animal a) {
            print("u r cool animal");
        }
    }
    
    public class Dog implements Animal {
        void sniff(Animal a) {
            print("dog sniff animal");
        }
        void flatter(Dog a) {
            print("u r cool dog");
        }
    }
    
    Animal a = new Dog();
    Dog d = new Dog();
    a.flatter(d);
    
    /*Compiler asks "Is there a method in Animal that can handle
     * Dog"? Yes!
     * flatter(Animal a) "
     * It then records the signature flatter(Animal a).
     *
     */
    
    /*-----------------------------
     *Interface vs. Implementation Inheritance.
     * Interface Inheritance(what):
     * 1.1 Allows you to generalize code in a powerful, simple way.
     *
     *Implementation Inheritance(how):
     *Allowas code-reuse:Subclasses can 
     rely on superclasses or interfaces.
    
     */

    2. Interface and inherience. 

    /*Method. Overriding vs. Overloading.
     * If a "subclass" has a method with the exact same signature 
     * as int the "superclass", we say the subclass overrides the 
     *the method.
     1.Animal's subclass Pig overrides the makeNoise() method.
     2.Methods with the same name but different signatures are overload.
     *
     */
    /*If a subclass has a method with the exact same signature 
     * as in the superclass, we say the subclass overrides the method.
     *1. Even if you don't write @Override, subclass still overrides the 
     method.
     @Override is just an optional reminder that you are overriding.
     *
     *Why use @Override ?
    1. Main reason: Protects against typos.
     1.1 If you say @Override, but it the method isn't
     actually overriding anything, you'll get a compiler error.
     1.2 public void addLats(Item x).
    2. Reminds programmer that method definition came from somewhere
    higher up in the inheritance hierarchy.
     */
    
    /*Interface Inheriance.
     * Specify the capabilities of a subclass using the implements
     * keyword is known as interface inheritance.
     * 1.1 Interface: The list of all method signatures.
     * 1.2 Inheritance: The subclass "inherits" the interface 
     * from a superclass.
     * 1.3 Specifies what the subclass can do, but not how.
     * 1.4 Subclasses must override all of the these methods.!
     *  will fail to compiler otherwise.
     */
    /* Two seemingly contradictory facts:
     *    #1. When you set x = y or pass a parameter, 
     *    you're just copying the bits.
     *    #2. A memory box can only hold 64 bit addresses for the appropriate
     *    type. 
     *    String x can never hold the 64 bit address of a Dog.
     *  
     *  Copying the Bits.
     *  Answer: If X is a superclass of Y, then memory boxes 
     *  for X may contain Y,
     *  1. An AList is-a List.
     *  2. Therefore List variable can hold ALList addresses.
     * /
     
     /*Implementation Inheritance
      * Interface inheritance:
      * 1.1 Subclass inherits signature, but NOT implementaion.
      *
      * For better or worse, Java also allows implementaion inheritance.
      * --Subclasses can inherit signatures AND implementation.
      *
      *Use the default  keyword to specify a method that subclasses should 
      inherit from an interface.
      1.1 Example: Let's add a default print() method to List61B.java.
      *
      */
     
    public interface Animal {
        public void makeNoise();    
    }
    
    public class Pig implements Animal {
        public void makeNoise() {  //override.
            System.out.print("oink");
        }
    }
    
    public class Dog implements Animal {
        public void makeNoise(Dog x) { //overload.
        //    ....
        }
    }
    The Safest Way to Get what you Want is to Try and Deserve What you Want.
  • 相关阅读:
    Java调用存储过程
    Eclipse快捷键
    [转载]实现GridView手动设定分页
    给博客换了个皮肤
    在Hibernate中使用Oracle的sequence主键
    解决Oracle 10g中The account lockde!
    [转载]CSS的优化与技巧
    PowerDesigner12 简单应用
    【转载】用开源软件搭建企业内部协作平台, Kill QQ MSN
    DropDownList数据绑定第一项为空
  • 原文地址:https://www.cnblogs.com/Shinered/p/10464167.html
Copyright © 2011-2022 走看看