Java中抽象类与接口

547 阅读1分钟

一、抽象类(abstract)

抽象类是有abstract修饰的类,例子如下:

abstract class AbsText{
   private int i = 0;

   public AbstractClass(int i){
      this.i = i;
   }

   abstract void abstractMethod();
   public void Method(){
   } 
}


抽象类中允许有构造方法,但是不能实例化,因为在这个类被定义为抽象类,即使该类中没有抽象方法也不能实体化。

也允许有成员变量,以及普通方法。


二、接口(interface)

接口是通过interface进行定义

interface InterTest{
   int a = 10;
   void Method();
}

接口内除了定义方法外还可以定义常量,该常量只能是public static final常量,方法的修饰符为public / default 方法。


三、二者区别

抽象类在java中表示一种继承关系,并且一个类只能使用一个继承关系。但是,一个类可以实现多个interface。


  • 抽象类和接口都不能直接实例化,但可以引用通过实例化实现类或子类。AbsTest t = new test(); InterText = new test()(其中test类继承AbsText抽象类,实现InterText接口。)
  • 接口中定义的变量只能是public static final,抽象类中的变量是普通变量
  • 抽象类中可以没有抽象方法
  • 接口可以被类多是小(被其他接口多继承),抽象类只能被单继承。
  • 接口中没有thiis指针,没有构造方法,不能拥有任何实例字段或实例方法。