------- android教育訓練、 java教育訓練、期待與您交流! ----------
- Java面向對象程式設計知識點總結。
一:final關鍵字。
- final關鍵字可以修飾類、方法和變量。
- final修飾的類不可以被繼承,是為了避免被子類修改功能。
- 被final修飾的方法不能被複寫。
-
被final修飾的變量是一個常變量,隻能指派一次,既可以修飾成員變量,也可以修飾局部變量。(但描述一些事物時,一些資料的出現是固定的,那麼這時為了增強閱讀性,都給這些值起一個名字,以友善閱讀)
如: final int PI = 3.14;
5.常變量的書必須全大寫,多個單詞組成則為全大寫下劃線連接配接。如:PI_MATH。
二.抽象類。
當多個類中出現相同的功能,但功能的主體不同,這時要向上抽取,隻抽取功能的定義,而不抽取功能的主體。
1.抽象:1.抽象方法一定要定義在抽象類中。2.抽象方法和抽象類都必須被abstract關鍵字修飾。3.抽象類不可以使用new建立對象,因為抽象類的方法沒有方法主體,調用無意義。4.抽象類中的方法要使用,必須由子類複寫其所有的抽象方法後,建立子對象的調用。如果子類隻覆寫了部分的抽象功能,那麼該子類還是一個抽象類。
2.抽象類的描述:抽象類同一般類沒有太大的差別,該如何描述事物還若何描述,隻不過該類中出現了一些抽象的或者說是看不懂的東西。這些不确定的東西也是該事物的功能需要明确出現,但是無法定義其方法主體,是以通過抽象方法表示出來。抽象類隻是比普通類多了一個抽象方法。
3.模闆方法:在定義功能時,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那麼這時就将不确定的部分暴露出去,由該子類去完成。
如下代碼所示:
abstract class GetTime
{
public final voidgetTime()
{
long start = System.currentTimeMillis();//擷取系統開始運作時間。
runCode();//調用不确定的父類抽象方法
long end =System.currentTimeMillis();//結束時間
System.out.println("用時:"+(end -start));
}
public abstract void runCode();//定義不确定方法為抽象方法。
}
class Son extends GetTime
{
public void runCode()//子類複寫其父類的抽象方法
{
for(int i =0;i<=10000;i++)
{
System.out.println(i);
}
}
}
class ModelDemo
{
public static voidmain(String[] args)
{
Son son = new Son();
son.getTime();//掉用對象方法測試結果。
}
}
黑馬程式員—Java入門學習日記基礎篇-面向對象總結4 三.接口。
當抽象類中的方法都是抽象的,那麼該類可以使用接口的方式表示,class用于定義類部分抽象,interface用于定義接口全部抽象。
1.接口成員:1.常量和成員方法為全部抽象。2.接口中的成員都有固定的修飾符:常量的修飾符必須是:public static final。3.方法的修飾符必須是:public abstract。是以接口中的成員全是public,若不加修飾符系統将自動添加完全。是以書寫時隻寫變量和方法的類型就可以,但不好識别。抽象的方法後邊跟分好。
2.子類實作父類使用implement關鍵字。
Implement與extends的差別,implement表示子類對接口的功能的實作,而不是繼承。對于變量因為其為static類型,是以通過靜态的屬性去通路如使用接口名調用,也可以使用子類的名去掉用,因為其是共享資料。而且其不能被重寫(final修飾)。extends是子類繼承父類的全部屬性。
3.接口也不可以建立對象,因為其全部為抽象方法,需要被子類實作,之類對接口中的功能要全部複寫後,子類才可以建立對象。
4.接口可以被類多實作。Java語言不支援多繼承,但支援多實作,一個子類可以實作多個接口的功能
5.接口的特點1、接口是對外暴漏的。2、使程式可以功能擴充。3、可以多實作,降低耦合性。4、類與接口之間是是實作關系,而且類可以繼承自一個類的同時,還可以實作多個接口。
四.多态。
可以了解為事物存在多種形态。如:同一方法存在不同的函數功能(重寫),抽象父類的引用可以指向子類對象。
-
多态的前提:必須類與類之間有繼承或實作的關系,并且存在重寫才能使用。
2.多态的應用:
abstractclass Animal
{ public static int NUM = 10;
public int x = 21;
abstract void eat();
abstract void run();
public void wow()
{
System.out.println("let mespeak");
}
}
//------------------------------------------------------------
class Catextends Animal
{ public int x = 10;//
public void eat()
{
System.out.println("let me eatsomething"+NUM);
}
public void run()
{
System.out.println("let me walk");
}
public void sleep()
{
System.out.println("let me sleep");
}
}
//--------------------------------------------------------------
class Dogextends Animal
{
public voideat()//---------------------------------------
{
System.out.println("let me eatbone");
}
public voidrun()//---------------------------------------
{
System.out.println("let me run");
}
public void wow()
{
System.out.println("let me wow");
}
}
//--------------------------------------------------------------
class AbsDemo
{
public static void main(String[] args)
{
Animal cat = new Cat();
Animal dog = new Dog();
kind(cat);
kind(dog);
System.out.println(Animal.NUM+dog.NUM);
Cat c = (Cat)cat;
c.sleep();
}
publicstatic void kind(Animal a)
{
a.eat();
a.run();
a.wow();
System.out.println(a.x);
}
}
//--------------------------------------------------------------黑馬程式員—Java入門學習日記基礎篇-面向對象總結4