java基礎_02_繼承

繼承:extends
    避免了對一般類和特殊類之間共同特徵進行的重複描述。
特點
1Java不支持多繼承,一個類只能繼承一個父類。但是可以實現多個接口。
2,繼承具有傳遞性。如:C繼承BB繼承A,那麼C也是可以使用A中的方法的。
3,多重繼承機制,一個類可以被多個不同的類所繼承。即可以有多個子類。
4,  建立子類對象後,要使用的方法中,如果子類有就用子類的,沒有就使用父類中的。
5,繼承中的成員變量:
   |-- super(),表示父類的存儲空間引用
   |-- 調用父類的成員變量,super.成員變量
6, 繼承中的成員方法
   |-- 子類中出現了和父類一模一樣的方法,子類重寫了父類方法  @override 註解:表示重寫
     注意:如果父類私有化private 則子類有同名也不叫覆蓋,因爲私有,子類不知道父類有這個
   |-- 保證權限大於等於父類的權限
   |-- 擴展功能,沿襲父類功能,加入子類自己的新功能  super.父類方法 
   |-- 如果某個方法不讓其子類複寫,可以在父類方法名前加final關鍵字。
7, 繼承中構造方法
   |-- 子類中所有的構造方法,必須先訪問父類中構造方法,java中默認訪問父類空參數的,都有隱藏super();
                語句如改爲訪問有參則改爲:super(參數)  
  子類爲什麼一定要先訪問父類?
   因爲子類要用父類裏的數據,所以要先看父類是怎麼初始化的。
  注意:子類的構造函數第一行也可以手動通過this()來訪問本類中的構造函數。
        子類中至少會有一個構造函數會訪問父類中的構造函數。
  注意super()語句必須寫在子類構造器的第一行。this()也是,但this() 和 super()語句不能同時存在。
8,實例化子例,會遞歸分配所有父類的空間。
好處
1,減少了代碼的書寫,利用性提高
2,繼承的出現,讓類與類之間產生了關係,多態就是這樣產生的。
心得
1, 一個子類繼承了一個父類後,子類就可以使用父類的東西,子類自己就可以不用在重寫相同的功能,減少了代碼的書寫。但是也有不好的地方,子類要用父類的東西,在創建子類時會先創建父類對象。這樣可能會加大內存的使用量。
2, 子類也可以覆蓋父類的方法,去改變父類的行爲。
3, 設計模式中的裝飾模式就是繼承的複寫功能來實現的。
例:
   要求:1, 實現繼承功能
	2, 表現出繼承的特性。 
class ExtendsText 
{
	public static void main(String[] args) 
	{
		B b = new B("123");
		b.eat(); //演示覆寫功能
		
		System.out.println("----------------------");

		C c = new C();
		c.play(); //演示傳遞性
	}
}
class A
{
	A()
	{
		System.out.println("構造...AA");
	}
	A(String s)
	{
		System.out.println("有參構造...AA...."+s);
	}
	public void eat()
	{
		System.out.println("...AA");
	}
	public void play()
	{
		System.out.println("A...在玩");
	}
}
class B extends A
{
	B(String s)
	{
		//此處隱藏了 super()語句,如沒有super語句也會自動調用super();
		//如果想調用父類的有參構造函數,使用 super(參數...)
		super(s); 
		System.out.println("構造...BB");

	}
	public void eat() //複寫父類的功能
	{
		System.out.println("......BB,複寫了父類");
	}	
}
class C extends B
{
	C()
	{
		super("ggh"); // 由於 B 沒有無參構造函數,所以此處必須寫明,否則出錯。
		System.out.println("構造...CC");		
	}
}

 

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