インタフェース、抽象クラス、実装クラス

14391 ワード

インタフェース、抽象クラス、実装クラス
1.インタフェースは最も抽象的な層であり、いかなる実現も必要としない.抽象層は、インタフェースメソッドの一部を実装したり、メソッドをカスタマイズしたりすることができます.実装クラスは、すべてのメソッドを実装する必要があります.2.インタフェースはクラス(抽象クラスと具体的なクラス)によって実現することができ、違いは抽象クラスがインタフェースを実現することであり、このインタフェースを実現する方法であっても、このインタフェースを実現しない方法であってもよい.具体的なクラスはインタフェースのすべての方法3を実現しなければならない.インタフェースはインタフェースによって継承することができるが、クラスによって継承することは許されない.クラス間は互いに継承することができ、単独でのみ継承することができる.abstractは抽象的な意味でjavaではクラスやメソッドを修飾するしかないと規定されているので属性を修飾することはできません.abstractによって修飾されたコンテンツは、クラス、メソッドなどの一時的に実現されていない.属性がabstractで修飾できないのは,属性に「まだ実装されていない」状態がないためである.例えばint ageを連想するかもしれません.またはString name;残念なことに,変数を明示するとintはageに初期値0をデフォルトで与え,Stringはnameに初期値「」をデフォルトで与える.したがって、属性は「実装されていない状態」に達しず、abstractによって修飾されない.6.抽象クラスと一般クラスは、抽象クラスがインスタンス化できない一方で、抽象方法はインタフェースの方法に似ている.一方,非抽象法は通常のクラス法と同様であるため,インタフェースと通常のクラスの2つの特型を兼ね備えている.7.抽象クラスはインスタンス化できないため、一般的に親クラスとしてサブクラスによって拡張およびインスタンス化されるため、抽象クラスのすべてのprotectedレベル以上のメソッドまたは変数は、サブクラスで呼び出すことができる.
  • 新しい2つのインタフェースContextとInvocation Context
  • package com.whc.abs;
    
    /**
     *          ,               
     *
     * @author Administrator
     * @date 2019/4/11
     */
    public interface Context {
    
        //              static
        String name = "admin";
        int age = 18;
        
        Object getName();
        Object getAge();
        void set();
    }
    
    

    別のインタフェース
    package com.whc.abs;
    
    /**
     * @author Administrator
     * @date 2019/4/11
     */
    public interface Invocation {
        Object getSrc();
        Object getTar();
        Object getCreateTime();
        Object getCreator();
    }
    
    

    抽象クラスAbstractContextの新規作成
    package com.whc.abs;
    
    import java.util.Date;
    
    /**
     *        ,              
     *
     * @author Administrator
     * @date 2019/4/11
     */
    public abstract class AbstractContext implements Context, Invocation {
    
       /**
         *         name
         */
        public String name = "admin1";
    
        /**
         *             
         *
         * @return
         */
        protected String getAccount(){
            return "100";
        }
    
        /**
         *              
         *
         * @return
         */
        @Override
        public Object getName(){
            return "admin";
        }
    
        /**
         *               ,     abstract  
         *
         * @return
         */
        abstract Object getEmail();
    
        /**
         *           
         *
         * @return
         */
        @Override
        public Object getCreateTime() {
            return new Date();
        }
    
        /**
         *           
         *
         * @return
         */
        @Override
        public Object getCreator() {
            return "administrator";
        }
    }
    
    

    抽象クラス実装クラスAbstractContextImpl
    package com.whc.abs;
    
    /**
     * @author Administrator
     * @date 2019/4/11
     */
    public class AbstractContextImpl extends AbstractContext {
    
        /**
         *                  
         *
         * @return
         */
        @Override
        public Object getName() {
            return "guest";
        }
    
        /**
         *           
         *
         * @return
         */
        @Override
        public Object getAge() {
            return "25";
        }
    
        /**
         *           
         */
        @Override
        public void set() {
    
        }
    
        /**
         *           
         *
         * @return
         */
        @Override
        Object getEmail() {
            return null;
        }
    
        /**
         *           
         *
         * @return
         */
        @Override
        public Object getSrc() {
            return null;
        }
    
        /**
         *           
         *
         * @return
         */
        @Override
        public Object getTar() {
            return null;
        }
    
        public static void main(String[] args) {
            AbstractContext context = new AbstractContextImpl();
            System.out.println(context.name);//    AbstractContext name  ,            name
            System.out.println(context.age);//            age
            System.out.println(context.getAccount());//               
            System.out.println(context.getName());//           ,                 
            System.out.println(context.getAge());//           ,   Context     
        }
    
    }
    
    

    出力結果:
    admin1
    18
    100
    guest
    25
    

    githubアドレス:
    https://github.com/wuhc2006/springboot-practice/tree/master/springboot-thread/src/main/java/com/whc/abs