JAVA基礎第七天學習日記_繼承、重寫、final關鍵字、抽象、接口

----------------------android培訓java培訓、期待與您交流! ----------------------

繼承:

  提高了代碼的複用性。

  讓類與類產生了關係,有了這個關係,纔有了多態的特性。

  JAVA語言中:對於類來說,只支持單繼承,不支持多繼承。(因爲多繼承會帶來安全隱患:當多個父類中定義了相同功能,當功能內容不同時,不確定要運行哪一個。)

JAVA支持多層繼承(繼承體系)。

首先查閱體系父類的描述,因爲父類中定義的是該體系中共性功能。通過了解共性功能,就可以知道該體系的基本功能。

創建最子類的對象。①父類有可能不能創建對象②創建最子類對象可以使用更多的功能,包括基本的也包括特有的。

①不要爲了獲取其他類的功能,簡化代碼而繼承;必須是類與類之間有所屬關係纔可以繼承。

②加載子類會先加載父類,所以父類的變量會被保存在子類對象的堆內存空間中。

Super關鍵字:在子類中使用父類的成員,使用super關鍵字

public class SuperDemo {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Zi zi=new Zi();
		zi.show();
	}

}
class Fu
{
	int num=4;
}
class Zi extends Fu
{
	int num=5;
	public void show()
	{
		System.out.println(super.num);
	}
}

在對子類對象進行初始化時,父類的構造函數也會運行,因爲子類的構造和你熟默認第一行有一條隱式的語句super();其會訪問父類中空參數的構造函數。而求子類中所有的構造函數默認第一行都是super();當父類中的構造函數有參數時,子類必須手動調用父類中的構造函數。  因爲父類中的和數據子類可以直接獲取,所以子類對象在建立時,需要先查看父類是如何對這些數據進行初始化的。所以子類在對象初始化是,要先訪問一下父類中的構造函數。Super語句一定定義在子類構造函數的第一行。

class Test14 extends Super
{
	public Test14(String s)
	{
		super(s);//此處需加這個構造函數,否則發生異常。或者在超類中加入一個空參數的構造函數。
		i=2;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Test14 t=new Test14("yes");
		System.out.println(t.i);
	}
}
class Super
{
	int i=0;
	public Super(String s)
	{
		i=1;
	}
}

---------------------------------------------------------------------------

覆蓋(重寫):當子類出現和父類一模一樣的函數時,當子類對象調用該函數,會運行子類函數的內容。如同父類函數被覆蓋一樣。

使用需求:當子類繼承父類,沿襲了父類的功能到子類中,子類雖具備該功能,但是功能的內容卻和父類不同。這時沒有必要定義新功能,而是使用覆蓋特殊,保留父類功能定義,並重寫功能內容。

使用規則:①父類的私有權限方法子類無法繼承覆蓋,但是語法上可以通過。

                  ②子類覆蓋父類,必須保證子類權限大於等於父類權限,纔可以覆蓋,否則 編譯失敗。

                  ③靜態只能覆蓋靜態。

---------------------------------------------------------------------------------

final關鍵字:最終關鍵字。

① 可以修飾類,函數,變量。

② 被final修飾的類不可以被繼承,爲了避免被繼承,被子類複寫功能。

③ 被final修飾的方法不可以被複寫。

④ 被final修飾的變量是一個常量只能賦值一次,既可以修飾成員變量,也可以修飾局部變量。(當在描述事物時,一些數據的出現值是固定的,那麼這時爲了增強閱讀性,都給這些值起個名字,方便與閱讀,而這個值不需要改變,所以加上final修飾。作爲常量,常量的書寫規範,所有字母都大寫,如果由多個單詞組成,單詞間通過_連接。)

⑤ 內部類定義在類中的局部位置上時,只能訪問該局部被final修飾的局部變量。

-------------------------------------------------------------------------------------

抽象:

需求分析:當多個類中出現相同功能,但是功能主體不同,這時可以進行向上抽取。只抽取功能定義,而不抽取功能主體。

抽象類特點:

① 抽象方法一定在抽象類中。

② 抽象類和抽象方法必須被abstract修飾。

③ 抽象類不能用new創建對象,因爲用抽象方法沒有意義。

④ 抽象類中的抽象方法要被使用,必須由子類複寫起所有的抽象方法後,建立子類對象調用,如果子類只覆蓋了部分抽象方法,那麼該子類還是一個抽象類。

⑤ 抽象類中可以不定義抽象方法,這樣做僅僅是不讓該類建立對象。

模版方法設計模式:在定義功能時,功能的一部分是確定的,但是有一部分是不確定的,而確定的部分在使用不確定的部分,那麼這時就將不確定的部分暴露出去,由子類完成(定義一個抽象類,由子類去 覆蓋複寫方法)。

class AbstractDemo
{
	public static void main(String[] args)
	{
		SubTime st=new SubTime();
		st.getTime();
	}
}	
abstract class GetTime 
	{
		public final void getTime()
		{
			long start=System.currentTimeMillis();
			runcode();
			long end=System.currentTimeMillis();
			System.out.println(end-start);
		}
		public abstract void runcode();//對外暴露不確定方法
	}
class SubTime extends GetTime
	{   	
		public void runcode()//由子類重寫
		{
			for (int i = 0; i < 500; i++) 
			{
				System.out.println(i);
			}
		}	
	}

------------------------------------------------------------------------------------

接口:格式:interface{}

接口中的成員修飾符是固定的。

成員常量:public static final

成員函數:public abstract

接口的出現將多繼承通過另一種形式體現出來,即多實現。

接口可以被理解爲一個特殊的抽象類。當抽象類中的方法都是抽象時,那麼該類可以通過接口的形式來表示。

不可以創建對象,因爲有抽象方法。需要被子類實現,子類被接口中的方法全部覆蓋後,子類纔可以實例化。否則子類是一個抽象類。

接口可以實現多繼承。在同一個子類實現的多個接口中不能定義方法名相同但是返回值不同的方法。

接口的特點:

① 接口是對外暴露的規則。

② 接口是程序的功能擴展。

③ 接口可以用來多實現。

④ 類與接口之間是實現關係,而且類可以繼承一個類的同時實現多個接口。

⑤ 接口與接口之間可以有繼承關係。

abstract class Student
{
	abstract void study();
	void sleep()
	{
		System.out.println("sleep");
	};
}
interface Smoking
{
	void smoke();
}
class ZhangSan extends Student implements Smoking
{
	void study(){};
	public void smoke(){};//此處必須有public,爲什麼?注意接口成員默認的修飾。方法修飾publi abstract
}
class Lisi extends Student
{
	void study(){};
}


 

---------------------- android培訓java培訓、期待與您交流! ----------------------
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章