[Java]OCP題庫-extends繼承

Boom
BOOM ⭐ 程式自學之旅
Nov 8, 2020

<排版順序>

題目->答案->個人解題方式->重點整理

【題目】

1.給定下面程式碼,哪些選項的描述是對的?(選擇3個)

01. class Animal{}

02. class Dog extends Animal{Tail tail;}

03. class Beagle extends Dog{public void jumper(){}}

04. class Cat extends Animal{public void jumper(){}}

A. Cat is-a Animal

B. Cat is-a jumper

C. Dog is-a Animal

D. Dog is-a jumper

E. Beagle has-a Tail

2.程式碼如下,請問最後結果為何?

01. class Person{

02. String name=”anonymity”;

03. public Person(String n){name=n;}

04. }

05. class Employee extends Person{

06. String empID=”E00";

07. public Employee(String id){empID=id;}

08. }

09. class Execute{

10. public static void main(String args[]){

11. Employee em=new Employee(“E01”);

12. System.out.print(em.empID);

13. }

14. }

A. E00

B. E01

C. anonymity

D. E00 E01

E. 編譯失敗

3.第5行插入甚麼方法,可以編譯成功?(選擇3個)

01. class A{

02 protected int getInt(int i){return i;}

03. }

04. class B extends A{

05. //插入程式碼

06. }

A. public int getInt(int i){return i;}

B. private int getInt(int i){return i;}

C. private int getInt(long i){return (int)i;}

D. protected long getInt(int i){return i;}

E. protected int getInt(long i){return (int)i;}

【答案】

  1. A、C、E
  2. E
  3. A、C、E

【個人解題方式】

1.

is-a:他是不是你的父類別(爸爸)

所以我們看到

01. class Animal{}

02. class Dog extends Animal{Tail tail;}

//class Dog繼承Animal(Animal是dog的父類別(爸爸))

03. class Beagle extends Dog{public void jumper(){}}

//class Beagle繼承Dog(Dog是Beagle的父類別(爸爸)),而Beagle有jumper這個動作。

04. class Cat extends Animal{public void jumper(){}}

//class Cat繼承Animal(Animal是Cat的父類別(爸爸)),而Cat有jumper這個動作。

所以根據上述

*Animal(父類別)-Dog(子類別)、Cat(子類別)

Dog(父類別)-Beagle(子類別)

Beagle has-a jumper

因為Beagle(孩子)-Dog(爸爸)

在這一行

class Dog extends Animal{Tail tail;}

表明了Dog有一個Tail的方法

所以說Beagle也繼承了Tail這個方法

2.編譯失敗,因為07行沒有加super

3.Override(覆寫) 方法的名稱、輸入的變數一樣(這時我們方法要使用public、protected放在前面)

繼承(extends)之後,子類別(小孩)可以覆蓋父類別(爸爸)寫的方法,比如說今天父類別有個方法叫吃飯,呼叫吃飯的時候會說:「馬上來」

void eat()

{

System.out.println(“馬上來”);

}

子類別繼承了爸爸的吃飯方法,可是把吃飯這個方法改為「等一下過去」

void eat()

{

System.out.println(“等一下過去”);

}

當後面呼叫子類別的吃飯方法時,就會印出「等一下過去」

Overloading(多載) 方法的名稱、輸入的變數不同(這時我們方法要使用private把它封裝起來)

讓他可以有多種方法可以使用,比如今天小蹦是冰淇淋商店的廚師(?),他有賣巧克力、草莓口味,那今天客人可能只買巧克力或草莓。

當客人選巧克力時,iPad螢幕輸出巧克力讓小蹦知道並且製作餐點

客人選草莓時,螢幕輸出草莓讓小蹦知道並且製作餐點。

客人兩個都選時,螢幕輸出巧克力、草莓讓小蹦知道並且製作餐點。

讓「選擇不同」時,有不同的因應方法。

【is-a v.s has-a】

is-a 是在講述兩著之間繼承的關係,比如像上面這題

A、Cat is-a Animal,意思為Cat(子類別)繼承了Animal(父類別)

has-a 表示類別之間的whole/part關係(這部分目前我不太了解,歡迎留言教我Q_Q)

E. Beagle has-a Tail,我理解的意思是Beagle也有Tail這個方法

我是蹦蹦,一個喜歡思考、解決問題的Java新手如果這篇文章對你幫助、或有任何有問題,歡迎底下留言或拍手讓我知道唷 🐻

--

--

Boom
BOOM ⭐ 程式自學之旅

Boom Engineer | BOOM ⭐ 程式自學之旅 | 透過筆記釋放記憶體,記錄自己的程式筆記,『內化』成為這段旅程的養分,也分享給路過,正在經歷這趟旅程的你 | Java note begin at 2020.09 | Python note begin at 2021.03