Abstract類和接口的區別

1.先說Abstract類

(1).Abstract類不能被實例化

abstract class test
{
	public abstract void test1();
	public void test2()
	{
		System.out.println("test2");
	}
}

class Abstract 
{
	public static void main(String[] args) 
	{
		test t=new test();
		t.test2();
	}
}
會報一下錯誤:Abstract.java:14: test 是抽象的;無法對其進行實例化test t=new test();

 (2) 抽象類只能被繼承,一個具體類繼承一個抽象類,必須實
   現所有抽象方法。
abstract class test
{
	public abstract void test1();
	public abstract void test5();
	public void test2()
	{
		System.out.println("test2");
	}
}
class test3 extends test
{
	public void test2()
	{
		System.out.println("Son extends test3");
	}
	public void test1()
	{
		System.out.println("Son extends test1");
	}
}
class Abstract 
{
	public static void main(String[] args) 
	{
		test3 t3=new test3();
		t3.test2();
	}
}
如果是上面代碼會報錯,因爲test5()沒有被覆蓋。

(3).

包含抽象方法的類,就一定是抽象類。 使用: abstract 關鍵字修飾,包含抽象方法。
(4).抽象方法,只有行爲的概念,沒有具體的行爲實現。使用:abstract 關鍵字修飾,並且沒有方法體。
2.接口
(1).全部的方法都是抽象方法,全部的屬性都是常量。 接口用來表示純抽象概念,沒有任何具體的方法和屬性。
(2).不能實例化,可以定義變量。
但是可以這樣做:
<span style="color:#333333;">interface B
{
	public static final int a=9;
	void test1();
	void test2();
}
class C implements B
{
	public void test1()
	{
		System.out.println("test1");
	}
	public void test2()
	{
		System.out.println("test2"+"---");
	}
}
class Test   
{
 public static void main(String[] args)
	{
	//C c=new C();
	//c.test1();
//	c.test2();
	//System.out.println(c.a);
</span><span style="color:#ff0000;">	B b=new C();</span><span style="color:#333333;">
	b.test1();
	System.out.println(b.a);
	}

}</span>

打印結果爲:
test1
9
但是卻不能C c=new B();這樣是錯誤的。
(3).接口只能被實現(繼承),一個具體類實現接口,必須使用全部的 抽象方法。
(4).接口之間可以繼承。
(5).接口中的屬性,默認是常量 public static final 
(6).接中的方法一定是:public abstract 
interface A
{
	public static final int a=9;
	public void test1();
}
class B implements A
{
	public void test1()
	{
		System.out.println("B");
	}
}
class Abstract 
{
	public static void main(String[] args) 
	{
		A a=new B();
		System.out.println(a.a);
	}
}
打印出結果爲9。

對接口中定義的變量的訪問

interface B
{
	public static final int a=9;
	void test1();
	void test2();
}
class C implements B
{
	public void test1()
	{
		System.out.println("test1");
	}
	public void test2()
	{
		System.out.println("test2"+"---");
	}
}
class Test   
{

public static void main(String[] args)
	{
	C c=new C();
		c.test1();
	c.test2();
	System.out.println(c.a);
	}

}

打印結果爲:

test1
test2---
9

說明實現的類可以直接訪問接口中定義的static final變量,注意在接口中定義的變量只能是static final類型的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章