物件導向 2 之抽象類

2022-09-02 07:45:12 字數 3927 閱讀 7965

* a:抽象類概述

* 抽象就是看不懂的

* b:抽象類特點

* a:抽象類和抽象方法必須用abstract關鍵字修飾

* abstract class 類名 {}

* public abstract void eat();//當不知道該方法具體是怎麼實現的

//比如動物吃,你知道它吃什麼嗎?怎麼吃?都不知道

* b:抽象類不一定有抽象方法,有抽象方法的類一定是抽象類或者是介面

* c:抽象類不能例項化那麼,抽象類如何例項化呢?

* 按照多型的方式,由具體的子類例項化。其實這也是多型的一種,抽象類多型。

* d:抽象類的子類

* 要麼是抽象類

* 要麼重寫抽象類中的所有抽象方法

*c:案例

public

class

demo1_abstrat

}abstract

class

animal

}class cat extends

animal

public

void

eat()

}

輸出:父類空參構造

貓吃魚注意:

animal q = new cat();訪問子類空參然後空參訪問父類構造方法,所以父類空參輸出先輸出

a.

class

demo3_葵花寶典

}abstract

class

葵花寶典

class 岳不群 extends

葵花寶典

}class 林平之 extends

葵花寶典

}class 東方不敗 extends

葵花寶典

}

輸出結果:
用牙籤
注意:
執行邏輯:岳不群 小岳子 = new 岳不群();當類中無構造方法時不去訪問非構造方法,只代表建立物件或者初始化(賦值),與類中有構造方法的執行邏輯分開。
b.

a:案例演示

* 具體事物:貓,狗

* 共性:姓名,年齡,吃飯

* 貓的特性:抓老鼠

* 狗的特性:看家

cat c = new cat("加菲",8);    

system.out.println(c.getname() + "..." +c.getage());

c.eat();

c.catchmouse();

dog d = new dog("八公",30);

system.out.println(d.getname() + "..." +d.getage());

d.eat();

d.lookhome();}}

abstract

class

animal //

空參public animal(string name,int age)

public

void setname(string name)

public string getname()

public

void setage(int

age)

public

int getage()

public

abstract

void eat(); //

吃飯}class cat extends

animal //

空參

public cat(string name,int age)

public

void

eat()

public

void

catchmouse()

}}class dog extends

animal //

空參

public dog(string name,int age)

public

void

eat()

public

void

lookhome()

}class cat extends

animal //

空參

public cat(string name,int age)

public

void

eat()

public

void

catchmouse()

}

輸出結果:

加菲...8

貓抓老鼠

看家八公...30

狗吃肉看家

注意:抽象類我的理解就是一些類所共有的屬性與方法的集合,抽象類中抽象方法在子類中必須繼承或者重寫。

c.* 假如我們在開發乙個系統時需要對程式設計師類進行設計,程式設計師包含3個屬性:姓名、工號以及工資。

* 經理,除了含有程式設計師的屬性外,另為還有乙個獎金屬性。

* 請使用繼承的思想設計出程式設計師類和經理類。要求類中提供必要的方法進行屬性訪問

public

class

test_employee

}abstract

class

employ

public

string getname()

public

void

setname(string name)

public

intgetid()

public

void setid(int

id)

public

intgetsalary()

public

void setsalary(int

salary)

public

abstract

void work();//

抽象方法

}class coder extends

employ

public

void

work() }//

專案經理

class manager extends

employ

public

void

work()

}

執行結果:

12 張三 21626

12 李四 222 223244

注意:本案例我一直糾結在專案經理的特有屬性如何處理,後來發現只要在專案經理類中定義個屬性並在方法中多加了乙個引數就ok了,這點暴露出我的思維不夠靈活,this.bonus = bonus其中this指當前物件,這句話相當於物件呼叫屬性並且賦值.

* a:面試題1

* 乙個抽象類如果沒有抽象方法,可不可以定義為抽象類?如果可以,有什麼意義?

* 可以

* 這麼做目的只有乙個,就是不讓其他類建立本類物件,交給子類完成

* b:面試題2

* abstract不能和哪些關鍵字共存

abstract和static

被abstract修飾的方法沒有方法體

被static修飾的可以用類名.呼叫,但是類名.呼叫抽象方法是沒有意義的

abstract和final

被abstract修飾的方法強制子類重寫

被final修飾的不讓子類重寫,所以他倆是矛盾

abstract和private

被abstract修飾的是為了讓子類看到並強制重寫

被private修飾不讓子類訪問,所以他倆是矛盾的

物件導向之抽象類

abstract 關鍵字,用於修飾方法和類 抽象方法 不同類的方法是相似,但是具體內容又不太一樣,所以我們只能抽取他的宣告,沒有具體的方法體,沒有具體方法體的方法就是抽象方法 抽象類 有抽象方法的類必須是抽象類 如果乙個類中有抽象方法,那麼這個類必須是抽象類 抽象類和抽象方法必須被abstract修...

物件導向之抽象類

為了引出抽象類我們先來這樣乙個例子 package cn.edu.xatuii public class person public void setname string name public void eat food f public string getname class chicken...

物件導向 抽象類

抽象 裡邊有未明確的東西。抽象類的特點 1 抽象方法一定在抽象類中。2 抽象方法和抽象類都必須被abstract關鍵字修飾。3 抽象類不可以用new建立物件,因為呼叫抽象方法沒意義。4 抽象類中的抽象方法要被使用,必須由子類複寫其所有的抽象方法後,建立子類物件呼叫。如果子類只覆蓋部分抽象方法,那麼該...