抽象クラス、最終クラス、インタフェース

11707 ワード

1.抽象クラス(abstract class)
階層内の新しいサブクラスの定義を継承するにつれて、クラスはますます具体的になり、親はより一般的になります.クラスの設計は、親と子が特性を共有できることを保証し、親を非常に抽象的に設計し、具体的な例がないほど抽象的に設計することがあります.このようなクラスは抽象的なクラスになります.インタフェースは徹底した抽象クラスである.
抽象クラス:クラスに抽象メソッドが含まれている場合、このクラスは抽象クラスです(抽象クラスには抽象メソッドがあるとは限りません).
  • は、クラスまたはクラスのいくつかの方法をabstractとして宣言することによって、クラスが抽象クラスであることを表す.
  • 抽象クラスはインスタンス化できない.(インスタンス化はクラスをロードする必要があり、抽象メソッドのメソッド体が分からないためインスタンス化できない)
  • 抽象クラスのサブクラスは、親クラスのすべての抽象メソッドを実装する必要があります.そうしないと、このサブクラスも抽象クラスとして宣言する必要があります.
  • 抽象クラスはインタフェースを実現することができる.
  • 抽象クラスは具体的なクラスを継承することができる.
  • 抽象クラスには*main()**メソッドがあります.
  • 構造方法とstatic方法は抽象的と宣言できない.
  • 抽象クラスには、サブクラスオブジェクトへのオブジェクト参照があり得る.
  • 抽象メソッドはpublicまたはprotected(privateの場合、クラスに継承されないため)でなければなりません.デフォルトはpublicです.
  • サンプルコード:
    package Test_9;
    
    //        
    abstract class  Base
    {
    	//           
        public void method()
        {
            System.out.println("Base");
        } 
        
        //         {}
        abstract public void Test();//
    }
    
    //  
    class Son extends Base
    {
        //           
    	@Override
    	public void Test() {
    		// TODO Auto-generated method stub
    	}
    }
    
    
    public class Test{
    
    	public static void main(String[] args) {
    		//Base base1 = new Base();    ,   Base       
    		Base base = new Son();
    		base.method();
    		
    	}
    }
    
    

    2.インタフェース(Interface)
    定義:ある物事が対外的にいくつかの機能を提供する宣言.
  • インタフェースもマルチステートを実現し、同時にインタフェースもJava単一継承の弱点を補った.
  • インタフェース宣言メソッドと定数を使用して、インタフェースのメソッドは宣言のみで、具体的な実装はありませんが、Java 8が開始され、インタフェースのメソッドにメソッドボディがあることを許可することができます.
  • インタフェースのメンバー変数のデフォルトは、public static finalです.初期値を付与する必要があります.
  • インタフェースのメソッドのデフォルトは、public abstract
  • です.
  • main関数
  • package Test_9;
    
    interface MyInterface{
    	int i = 1;//     
    	void add();
    }
    
    //demo       MyInterface,               
    class Demo implements MyInterface{
    	//       
    	@Override
    	public void add() {
    		System.out.println(i);
    	}
    	
    }
    
    public class Test{
    	public static void main(String[] args) {
    		Demo demo = new Demo();
    		demo.add();
    	}
    }
    
    
    package test11;
    /**
     *       (   )    
     * @author msi
     *
     */
    
    interface A{
    	
    }
    
    interface B{
    	
    }
    
    interface C{
    	
    }
    //         
    interface D implements A{//    
    	
    }
    //,             ,      ,      。
    interface E extends A,B,C{
    	
    }
    public class interfaceTest {
    	
    }
    
    
    public interface Inter {
    
        /**
         *        :public static final  x  
         */
        public static final int a = 1;
    
        /**
         *       ,       
         */
        //public Inter{}
    
        /**
         *       public abstract  
         */
        public abstract void test();
    
        /**
         * Java8            
         */
        public static void test2(){
            System.out.println("  ");
        }
    
        public static void main(String[] args) {
            Inter.test2();
        }
    
    }
    
    

    3.最終クラス
  • にfinal修飾を加えたクラスが最終クラスである.
  • にfinalを加える方法が最終的な方法である.
  • 最終クラスには最終メソッドがあってもなくてもよい(抽象クラスには抽象メソッドがあってもなくてもよい);
  • 最終クラスは継承できません.最終的な方法は書き換えられません.