------Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練、期待與您交流! -------
1.java面向對象的特性---繼承性
a.提高了代碼的複用性
b.讓類與類之間産生了關系,有了這個關系,才有多态的特性
注意:千萬不要為了擷取其他類的功能,簡化代碼而繼承。
必須是類與類之間有所屬關系才可以繼承 。
2.Java語言:java隻支援單繼承,不支援多繼承
因為多繼承容易帶來安全隐患:當多個父類中定義了相同的功能,但功能内容不同時,子類對象不能确定要運作哪一個。
java支援多層繼承,也就是一個繼承體系。
簡單一句話:查閱父類功能,建立子類對象使用功能。
3.super關鍵字:當子類繼承父類後,子類對象要使用父類變量時,使用super關鍵字。
4.子父類中的函數
當子類出現和父類一樣的函數時。
當子類對象調用該函數時,會運作子類函數的内容
如同父類的函數被覆寫一樣。
這種情況是函數的另一個特性:重寫(覆寫);
當子類繼承父類,沿襲了父類的功能,但是子類雖具備該功能,但是功能的内容卻和父類不一緻。
這時,沒必要定義新的功能,而是使用覆寫,保留父類的功能并重寫功能内容
覆寫:
1.子類覆寫父類,必須保證子類權限大于等于父類權限,才可以覆寫,否者編譯失敗。
2.靜态隻能覆寫靜态。
記住:
重載:隻看同名函數的參數清單
重寫:子父類方法要一模一樣,包括傳回值類型
5.預設權限protected
6.子父類中的構造函數:
a.在對子類對象進行初始化時,父類的構造函數也會運作
那是因為子類的構造函數預設第一行有一條隐身的語句 super()
super();會通路到父類中空參數的構造函數,而且子類中的所有構造函數預設第一行都是super();
b.為什麼子類一定要通路父類中的構造函數呢?
因為父類中的資料,子類可以直接擷取,是以子類對象在建立時,需要先檢視父類是如何對這些資料進行初始化的。
是以子類在對象初始化時,要先通路一下父類中的構造函數
如果要通路父類中指定的構造函數,可以通過手動定義super語句的方式來指定。
注意:super語句一定定義在子類構造函數的第一行
結論(子類的執行個體化過程):
子類的所有的構造函數,預設都會通路父類中空參數的構造函數。
因為子類每一個構造函數的第一行都有一句隐式super();
當父類中沒有空參數的構造函數時,子類必須通過手動super語句來指定要通路父類中的構造函數。
為什麼super要寫在第一行,因為初始化動作要先執行!
7.final:最終,作為一個修飾符
a.可以修飾類,函數,變量
b.被final修飾的類不可以被繼承 ,為了避免被繼承,被子類複寫功能。
c.被final修飾的方法不能被複寫
當在描述事物時,一些資料的出現值是固定的,那麼這時為了增強閱讀性,都給這些值起個名字,友善閱讀。
而這個值不需要改變,是以加上final修飾
作為常量:常量的書寫規範,所有字母都大寫,如果由多個單詞組成,單詞間通過_連接配接。
static final double PI = 3.14;
d.内部類定義在類中的局部變量,隻能通路該局部被final修飾的局部變量
8.抽象類:當不同的類中有同樣的方法。但是方法内容不同。這時就需要向上抽取。這時,隻抽取功能定義,而不抽取功能主體。
抽象類的特點: a.抽象方法一定在抽象類中
b.抽象方法和抽象類必須由abstract關鍵字修飾
c.抽象類不可以用new建立對象,因為調用抽象方法沒有意義。
d.抽象類中的方法要被使用,必須由子類複寫其所有的抽象方法後,建立子類對象調用。
如果子類隻覆寫了部分抽象方法,那麼該子類還是一個抽象類。
抽象類和一般類沒有太的不同。
該如何描述事務就如何描述事物,隻不過該事物中出現了一些看不懂的東西。
這些不确定的部分,也是該事物的功能,需要明确出現。但是無法定義主體。
通過抽象方法來表示。
抽象類比一般類多了抽象函數,就是在類中可以定義抽象方法。
抽象類不可以執行個體化。
特殊:抽象類中可以不定義抽象方法,這樣做僅僅是不讓該類建立對象。
abstract class Student
{
abstract void study();
}
class BaseStudent extends Student
{
void study()
{
System.out.println("base study");
}
}
class AdvStudent extends Student
{
void study()
{
System.out.println("adv study");
}
}
class AbstractDemo
{
public static void main(String[] args)
{
}
}
9.
//擷取時間的模闆類
abstract class ToolGetTime
{
//此方法不需要被重寫,是以定義為final
public final void getTime()
{
long start = System.currentTimeMillis();
runcode();
long end = System.currentTimeMillis();
System.out.println("運作時間"+(end-start)+"毫秒");
}
//因為此類中該方法,不需要定義内容,是以定義成abstract
public abstract void runcode();
}
class subGetTime extends ToolGetTime
{
public void runcode()
{
for(int x= 0;x<500;x++) {
System.out.print(x);
}
}
}
class TemplateDemo
{
public static void main(String[] args)
{
subGetTime st = new subGetTime();
st.getTime();
}
}
10.抽象類中既可以定義抽象方法,也可以定義非抽象方法。
11.接口 interface:
格式特點:
a.接口中常見定義:常量,抽象方法
b.接口中的成員都有固定修飾符
常量:public static final
方法:public abstract
記住:接口中的成員都是public的
接口:是不可以建立對象的,因為有抽象方法
需要被子類實作,子類對接口中的抽象方法全部覆寫以後,子類才可以執行個體化。否則子類是個抽象類。
接口可以被類多實作。
interface A
{
public static final int a = 3;
public abstract void show();
}
class B implements A
{
public void show() {
System.out.println("b 實作了 a 接口");
}
}
class InterfaceDemo
{
public static void main(String[] args)
{
B b = new B();
b.show();
}
}
12.一個類既繼承氣他類,也實作了氣他接口那麼書寫格式
class Cat extends Animal implements BuRuDongWu
13.接口的特點:
a.接口是對外暴露的規則
b.接口是程式的功能擴充
c.接口可以用來多實作
d.類與接口之間是實作關系,而且類可以繼承一個類的同時實作多個接口。
e.接口與接口之間可以有繼承聯系,還可以多繼承