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類型的。