抽象類:
抽象類可以沒有抽象方法,但一旦聲明爲抽象類(abstract),就不能用於實例化,即new xxx()是不允許的。
屬性和初始化塊不能用於抽象(abstract)。
抽象的只能是方法。一旦一個類中有abstract方法,則該類必須爲抽象類。
如果一個類實現了某個接口,但沒實現接口所提供的方法,則該類必須爲抽象類。
由於static修飾的方法屬於類,當一個方法用static修飾時,表明可以通過類直接調用而無須實例化,如果此時用abstract修飾,表明無方法體,這與static矛盾,因此static不能用於抽象方法。
final表明方法不能被重寫,所以final不能和abstract同時修飾一個方法。
接口:
接口定義了某些類的共同行爲規範。接口的目的是使規範和實現分離,降低軟件模塊之間的耦合性。
由於接口只是定義一組規範,因此接口裏面不能有構造方法,初始化塊。
接口裏只能包含屬性(即常量),方法(只能是抽象實例方法),內部類(或接口),枚舉。
接口裏成員默認是public ,如果想添加訪問修飾符,也只能是public。
package lesson7;
interface Output
{
// static final且public
int MAX_SIZE = 1000;
//public abstract 不能用static,因爲與abstract矛盾
void input();
void output();
}
class Test
{
public static void main(String[] args)
{
//可以通過接口直接訪問接口的變量,因爲接口成員變量是public static final
System.out.println(Output.MAX_SIZE);
//錯誤。因爲MAX_SIZE爲final變量
Output.MAX_SIZE=10;
}
}
儘管接口不能顯示繼承任何類,但接口類型的引用變量可以直接賦值給Object引用變量。