問題記錄二

  1. 自限定型、枚舉Enum<E extends Enum< E >>
  2. 反射、Class
  3. 接口中的所有方法自動地屬於public,因此在接口中聲明方法時,不必提供關鍵字public。但是在類中實現接口的時候一定要顯式地將實現的方法聲明爲public
  4. 接口中不能包含有實例域,但是可以包含常量,並且接口中的域將被自動設爲public static final
  5. 接口不是類,所以我們不能實例化一個接口,但是我們可以聲明接口的變量:Comparable x;
    並且接口變量只能夠引用實現了接口的類對象:x=new Employe("Tom",10000);
  6. 如同使用instanceof來檢查一個對象是否屬於某個特定類一樣,也可以使用instanceof檢查一個對象是否實現了某個特定接口:if(anObject instance Comparable) {...}
  7. 接口也可以被拓展,用extends關鍵字
  8. Java中可以多級繼承,但是不存在多重繼承
  9. 可以爲接口提供一個默認實現,必須用default修飾符標記這樣一個方法
    默認方法的一個重要作用是接口演化,假如說庫裏面的某個接口添加了一個方法,但是之前繼承過這個接口的類沒有實現這個接口,那麼就會無法編譯。而我們添加了默認函數就可以避免這種事情,讓舊的代碼兼容新的jdk
//可能我們只需要關注前兩個事件
public interface MouseListener{
	default void mouseClicked(MouseEvent event) {}
	default void mousePressed(MouseEvent event) {}
	default void mouseReleased(MouseEvent event) {}
	default void mouseEntered(MouseEvent event) {}
	default void mouseExited(MouseEvent event) {}
  1. 接口衝突:如果先在一個接口中將一個方法定義爲默認方法,然後又在超類或者另一個接口中定義了同樣的方法,就會發生接口衝突,因爲編譯器不知道你要調用的是哪個方法。有兩個原則:
    超類優先:如果超類提供了一個具體方法,同名並且有相同參數類型的接口默認方法會被忽略
    超接口衝突:如果一個超接口提供了一個默認方法,另一個接口提供了一個同名並且參數類型相同的方法,則必須覆蓋這個方法來解決問題(編譯器會報錯)
    我們來看一下第二種
interfce Named{
	default String getName(){
		return getClass().getName()+"_"+hashCode();
}	

class Student implements Person,Named{
	//要覆蓋掉
	public String getName(){
		return Person.super.getName(); //指明用的哪一個就好了
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章