1. 程式人生 > 實用技巧 >Java 抽象類和介面

Java 抽象類和介面

抽象類

抽象類就是指在普通類的結構裡面增加抽象方法的組成部分。
擁有抽象方法的類一定屬於抽象類,抽象類要使用abstract宣告。
抽象類不能例項化。
抽象類必須有子類,子類如果不是抽象類,那麼必須覆寫抽象類的全部抽象方法。
任何類中存在static方法的時候可以不需要例項化直接呼叫方法(類.static方法)

介面

如果一個類之中只是由抽象方法和全域性常量所組成,那麼在這種情況下不能定義為抽象類,只能定義為介面。
定義介面:

interface A
{
	//全域性常量
	public static final String STR = "Hello World!";
	//抽象方法
	public abstract void fun();
}

介面存在抽象方法,不能直接例項化。

  • 介面必須存在子類,此時一個子類可以使用implements關鍵字實現多個介面;
  • 介面的子類如果不是抽象類,必須覆寫介面中的全部抽象方法;
  • 介面的對像可以利用子類物件的向上轉型操作實現。
package com.testInterface;

interface A
{
	public static final String STR = "Hello World";
	public abstract void funA();
}
interface B
{
	public abstract void funB();
}
class X implements A,B
{

	//實現介面A的抽象方法
	public void funA()
	{
		System.out.println("A介面的抽象方法");
	}

	//實現介面B的抽象方法
	public void funB() 
	{
		System.out.println("B介面的抽象方法");
	}
	
}
public class TestDemo 
{
	public static void main(String[] args) 
	{
		X x =new X();
		System.out.println(x instanceof A);
		System.out.println(x instanceof B);
		System.out.println(x instanceof X);
	}
}

結果

true
true
true

物件x即是X類,也是A、B介面。

如果子類除了介面之外,還要繼承抽象類,語法先使用extends繼承,而後使用implements實現。

class X extends C implements A,B

對於介面而言,只有抽象方法和全域性常量,並且在方法上是否寫public結果都一樣,
全域性常量也可以不寫public static final
下面兩種介面的定義完全相同。

interface A
{
   public static final String STR = "Hello World";
   public abstract void funA();
}

interface A
{
   String STR = "Hello World";
   void funA();
}

一個抽象類可以繼承一個抽象類,一個介面卻可以使用extends同時繼承多個介面(但是介面不能繼承抽象類,因為如果繼承抽象類的話就必須實現其中的抽象方法,而介面中只能是抽象方法)。

  • 介面的主要功能是解決單繼承侷限問題。
  • 接口裡面可以定義普通內部類,抽象內部類 ,內部介面。
  • 在一個接口裡面如果使用了static去定義一個內部介面表示是一個外部介面。

介面在實際的開發中的三大核心作用:

  • 定義不同層之間的操作標準;
  • 表示一種操作能力;
  • 表示將伺服器端的遠端方法檢視暴露給客戶端。