天天看點

abstract和interface的差別

abstract和interface的差別

  1. 抽象類可以有構造方法,接口中不能有構造方法。
public abstract class AbstractDemo {
    public AbstractDemo() {
    }
}

public interface InterDemo {
    //Interface abstract methods cannot have body
//    public InterDemo(){
//        
//    };
}

           
  1. 抽象類中可以有普通成員變量,接口中沒有普通成員變量(接口中可以有變量,但是無論你怎麼寫,最後都是public static final的。)
  2. 抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。(預設public abstract類型)
public abstract class AbstractDemo {
    int num=0;
    public AbstractDemo() {
    }
    
    public int getNum(){
        return 0;
    }
    public abstract int get();
}
           
public interface InterDemo {
    int num=0;
    //Modifier 'public' is redundant for interface methods 
    int get();//預設時public abstract類型不需要添加
    //Illegal combination of modifiers: 'final' and 'abstract'
    //final int get();
    //Static methods in interfaces should have a body
    //static int get();
}
           
  1. 抽象類中的抽象方法的通路類型可以是public,protected,但接口中的抽象方法隻能是public類型的,并且預設即為public abstract類型。
  2. 抽象類中可以包含靜态方法,接口中不能包含靜态方法。
//Static methods in interfaces should have a body
    //static int get();
           
  1. 類和接口中都可以包含靜态成員變量,抽象類中的靜态成員變量的通路類型可以任意,但接口中定義的變量隻能是public static final類型,并且預設即為public static final類型。
  2. 一個類可以實作多個接口,但隻能繼承一個抽象類。