Java繼承練習
一、選擇
1.在Java中,以下程式的輸出結果是 A
A. Super-->print
B. Test-->print
C. Super-->print
Test-->print
D. 編譯錯誤
2.在Java中,以下關於方法過載和方法重寫描述正確的是 D
A. 方法過載和方法重寫實現的功能相同
B. 方法過載出現在父子關係中,方法重寫是在同一類中
C. 方法過載的返回型別必須一致,引數項必須不同
D. 方法重寫需要出現在滿足繼承關係的子類中
3.哪個選項中的方法插入到(1)處可以正確實現方法重寫 C
A. public static void bark(){}
B. public final void display(){}
C. public void eat(String food){}
D. public boolean eat(String food){}
4.在下面程式的註釋1處補充上下列()方法,會導致在編譯過程中發生錯誤 D
A. public float getNum() { return 4.0f; }
B. private float getNum() {return 4.0f;}
C. public void getNum(double d){}
D. public double getNum(float d){ return 4.0f; }
5.如下Java原始檔,編譯並執行Child.java後,以下結果描述正確的是 D
A. 編譯錯誤:沒有找到構造器Child()
B. 編譯錯誤:沒有找到構造器Parent1()
C. 正確執行,沒有輸出值
D. 正確執行,輸出結果為:parent2
6.分析如下所示的Java程式碼,則選項中的說法正確的是 C
A. 第2行錯誤,Test類的建構函式中引數名稱應與其父類建構函式中的引數名相同
B. 第3行錯誤,應使用super關鍵字呼叫父類的name屬性,改為super.name="hello"
C. 第4行錯誤,呼叫父類構造方法的語句必須放在子類構造方法中的第一行
D. 程式編譯通過,無錯誤
7.關於super的說法正確的是 C
A. 是指當前子類的物件
B. 是指當前類的物件
C. 是指當前父類的物件
D. 可以用在main()方法中
8.閱讀下面JAVA程式碼片段,正確的選項是 B
A. 第1行編譯錯誤,但能輸出正確結果
B. 第2行編譯錯誤,但能輸出正確結果
C. 第3行編譯錯誤,不能輸出正確結果
D. 第4行編譯錯誤,不能輸出正確結果
9.下列關於super和this的說法正確的是(多選)ABD
A. this關鍵字通常指當前物件
B. super關鍵字則指父類物件
C. 在一個類中this只可以呼叫當前類中公有屬性和方法
D. 在一個類中super可以呼叫父類中允許被訪問的屬性和方法
10.下列關於Object類的敘述錯誤的是 D
A. Object類是所有類的父類
B. 所有類都可以繼承Object中允許被繼承的方法
C. 一個類沒有使用extends關鍵字明確標識繼承關係,則預設繼承Object類
D. 要想繼承Object類,必須使用extends關鍵字標識繼承關係,否則不會實現繼承
11.該段程式碼的執行結果為 D
A. true
B. 相等
C. 不相等
D. false
12.在Java中,關於繼承的說法錯誤的是 C
A. 使用extends關鍵字實現一個類繼承另一個類
B. 所有的Java類都直接或間接地繼承了java.lang.Object類
C. 在子類的構造方法中,必須顯式呼叫父類的構造方法
D. 在子類的構造方法中,可以通過super關鍵字呼叫父類的構造方法
13.下列關於final的說法錯誤的是 C
A. final修飾的變數值不允許被修改
B. final修飾的方法不可被重寫
C. final可以修飾所有方法
D. final不可以修飾構造方法
二、程式設計
程式設計練習:某公司要開發“XX車行管理系統”,請使用物件導向的思想,設計自定義類描述自行車、電動車和三輪車。
程式參考執行效果圖如下:
任務
任務分析;
第一步:分析自行車、電動車和三輪車的共性:
都是非機動車,具有非機動車的基本特徵
都有執行的方法
第二步:根據共性,定義非機動車
屬性:品牌、顏色、輪子(預設2個)、座椅(預設 1個)
方法:
- 編寫無參構造方法、雙參構造方法和四參構造方法,其中,在雙參構造方法中,完成對品牌和顏色的賦值;在四參構造方法中,完成對所有屬性的賦值
- 編寫執行的方法,描述內容為:這是一輛** 顏色的,** 牌的非機動車,有** 個輪子,有** 個座椅的非機動車。其中**的資料由屬性提供
第三步:定義自行車、電動車和三輪車分別繼承自行車類,要求:
自行車類:
在構造方法中呼叫父類多參構造,完成屬性賦值
重寫執行方法,描述內容為:這是一輛** 顏色的,** 牌的自行車。其中** 的資料由屬性提供
電動車:
增加“電池品牌”屬性
重寫執行方法,描述內容為:這是一輛使用** 牌電池的電動車。其中** 的資料由屬性提供
三輪車:
在無參構造中實現對輪子屬性值進行修改
重寫執行方法,描述內容為:三輪車是一款有**個輪子的非機動車。其中 ** 的資料由屬性提供
父類:
package bike;
public class Car {
private String name;
private String color;
private int wheel=2;
private int seat=1;
public Car(){
}
public Car(String name, String color){
this.name = name;
this.color = color;
}
public Car(String name, String color, int wheel, int seat) {
this.name = name;
this.color = color;
this.wheel = wheel;
this.seat = seat;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getWheel() {
return wheel;
}
public void setWheel(int wheel) {
this.wheel = wheel;
}
public int getSeat() {
return seat;
}
public void setSeat(int seat) {
this.seat = seat;
}
public String run() {
String str="這是一輛"+getColor()+"顏色的,"+getName()+
"牌的非機動車,有"+getWheel()+"個輪子,有"+getSeat()+"個座椅";
return str;
}
}
自行車類:
package bike;
public class Bike extends Car{
public Bike(){
super("捷安特","黃");
}
public String run() {
String str="這是一輛"+getColor()+"顏色的,"+getName()+"牌的自行車。";
return str;
}
}
電動車類:
package bike;
public class ElectricCar extends Car{
private String batteryName;
public ElectricCar(){
}
public ElectricCar(String batteryName) {
super();
this.batteryName = batteryName;
}
public String getBatteryName() {
return batteryName;
}
public void setBatteryName(String batteryName) {
this.batteryName = batteryName;
}
public String run(){
String str="這是一輛使用"+getBatteryName()+"牌電池的電動車";
return str;
}
}
三輪車類:
package bike;
public class Tricycle extends Car{
public Tricycle() {
setWheel(3);
}
public String run() {
String str="三輪車是一款有"+getWheel()+"個輪子的非機動車。";
return str;
}
}
測試類:
package bike;
public class Test {
public static void main(String[] args) {
System.out.print("父類資訊測試:");
Car car=new Car("天宇","紅",4,2);
System.out.println(car.run());
System.out.print("自行車類資訊測試:");
Bike bike=new Bike();
System.out.println(bike.run());
System.out.print("電動車類資訊測試:");
ElectricCar etc=new ElectricCar("飛鴿");
System.out.println(etc.run());
System.out.print("三輪車類資訊測試:");
Tricycle tcycle=new Tricycle();
System.out.println(tcycle.run());
}
}
2.請使用物件導向的思想,設計自定義類Person繼承Object類,重寫toString方法實現物件資訊輸出。
執行效果如下圖所示:
思路分析
建立一個 Person 類繼承自 Object,其中類的結構要求為:
屬性:name(姓名)、age(年齡)、sex(性別)
方法:
建立帶參(name、age、sex為引數)構造方法
重寫 toString 方法,輸出資訊格式為:姓名:** 年齡:** 性別:**(其中,**為物件對應屬性值)
建立測試類,在測試方法中,例項化 Person對 象,並傳入三個屬性值。然後,分別通過直接列印Person物件以及利用重寫的 toString 方法,列印輸出2行物件資訊。
public class Person{
//私有屬性:name(姓名)、age(年齡)、sex(性別)
private String name;
private int age;
private String sex;
//帶參構造方法(name、age、sex為引數)
public Person() {
}
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
//通過封裝實現對屬性的get/set方法設定
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
//重寫toString方法,表示形式為:姓名:+**+ 年齡:+**+ 性別:+**
public String toString() {
return "姓名:"+ getName()+" 年齡:"+ getAge() +" 性別: "+ getSex();
}
}
package test;
public class test {
public static void main(String[] args) {
Person LiMing=new Person("李明",18,"男");
System.out.println(LiMing);
System.out.println(LiMing.toString());
}
}
3.請使用物件導向的思想,實現楊梅和仙人蕉的資訊描述。
程式參考執行效果圖如下:
思路分析:
1、根據楊梅和香蕉的共性,抽取父類水果(Fruits)
私有屬性:水果的形狀(shape)和口感(taste)
方法:
帶參建構函式(引數為shape和taste)
建立無參無返回值得方法eat(描述內容為:水果可供人們食用!)
重寫equals方法,比較兩個物件是否相等(比較shape,taste)
2、子類Waxberry
私有屬性:顏色(color)
方法:
呼叫父類的構造方法,完成屬性賦值
建立不允許重寫的face方法,描述為:楊梅:、,果味酸甜適中。
重寫父類eat方法,描述為:楊梅酸甜適中,非常好吃!
重寫toString方法,輸出的表現形式不同(輸出shape,color,taste)
要求Waxberry類不允許有子類
3、子類:Banana
私有屬性:品種(variety)
方法:
帶參構造方法為所有屬性賦值
建立無參無返回值的advantage方法,描述為:** 果形**,果肉香甜,可供生食。
過載要求(2)中的advantage方法(帶引數color),描述為:** 顏色為 **
4、測試,執行效果參照效果圖:
例項化2個父類物件,並傳入兩組相同的引數值
呼叫父類eat方法
測試重寫equals方法,判斷兩個物件是否相等
例項化子類Wacberry物件,並傳入相關引數值
呼叫子類face方法和重寫父類eat方法後的eat方法
測試重寫toString方法,輸出子類物件的資訊
例項化Banana類物件,並傳入相關引數值
呼叫子類的advantage和它的過載方法
父類
package fruit;
public class Fruits {
private String shape;
private String taste;
public Fruits(){
}
public Fruits(String shape, String taste) {
this.shape = shape;
this.taste = taste;
}
public String getShape() {
return shape;
}
public void setShape(String shape) {
this.shape = shape;
}
public String getTaste() {
return taste;
}
public void setTaste(String taste) {
this.taste = taste;
}
public String eat(){
return "水果供人們食用!";
}
public boolean equals(Object obj) {
if(obj==null){
return false;
}else{
Fruits frt=(Fruits)obj;
if(this.getShape().equals(frt.getShape())&&this.getTaste().equals(frt.getTaste())){
return true;
}else{
return false;
}
}
}
}
仙蕉類
package fruit;
public class Banana extends Fruits{
private String variety;
public Banana() {
}
public Banana(String variety) {
this.variety=variety;
}
public String getVariety() {
return variety;
}
public void setVariety(String variety) {
this.variety = variety;
}
public void advantage() {
System.out.println(getVariety()+"果形"+getShape()+",果肉香甜,可供生食。");
}
public void advantage(String color) {
System.out.println(getVariety()+"顏色為"+color);
}
}
楊梅類
package fruit;
public class Waxberry extends Fruits {
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Waxberry(String color) {
this.color = color;
}
public final String face() {
return "楊梅:" + getColor() + "、" + getShape() + ",果味酸甜適中。";
}
public String eat() {
return "楊梅酸甜適中,非常好吃!";
}
public String toString() {
return "楊梅的資訊:果實為"+getShape()+"、"+getColor()+","+getTaste()+",非常好吃!";
}
}
測試類
package fruit;
public class Test {
public static void main(String[] args) {
Fruits f1=new Fruits("圓形","果肉香甜");
Fruits f2=new Fruits("圓形","果肉香甜");
System.out.println(f1.eat());
boolean flag=f1.equals(f2) ;
System.out.println("fru1和fru2的引用比較:"+flag);
System.out.println("================================================");
Waxberry wab= new Waxberry("紫紅色");
System.out.println(wab.face());
System.out.println(wab.eat());
System.out.println(wab.toString());
System.out.println("================================================");
Banana banana=new Banana("仙人蕉");
banana.setShape("短而稍圓");
banana.advantage();
banana.advantage("黃色");
}
}
相關文章
- Java-發紅包例項-繼承練習Java繼承
- 12.16 Java繼承Java繼承
- Java的繼承Java繼承
- java繼承extendsJava繼承
- java學習——物件導向之繼承Java物件繼承
- 學習Java中遇到的繼承問題Java繼承
- Java集合繼承圖Java繼承
- java中的繼承Java繼承
- java -繼承 -重寫Java繼承
- odoo 繼承(owl繼承、web繼承、view繼承)Odoo繼承WebView
- Java學習day09—-封裝和繼承Java封裝繼承
- java繼承與多型Java繼承多型
- 【Java】繼承、抽象、組合Java繼承抽象
- Java 繼承是什麼?Java繼承
- java物件導向繼承Java物件繼承
- JavaScript 學習之繼承JavaScript繼承
- 菱形繼承,虛繼承繼承
- 原型,繼承——原型繼承原型繼承
- Python父子關係——繼承(反恐精英案例,應用與練習)Python繼承
- java——繼承遇到構造方法Java繼承構造方法
- java繼承基礎詳解Java繼承
- Java之繼承和抽象類Java繼承抽象
- 多繼承 與 多重繼承繼承
- Head First Java學習筆記(7):繼承與多型Java筆記繼承多型
- 7-5 jmu-Java-03物件導向-06-繼承覆蓋綜合練習-Person、Student、Employee、Company JAVAJava物件繼承
- Javascript繼承2:建立即繼承—-建構函式繼承JavaScript繼承函式
- Javascript繼承4:潔淨的繼承者—-原型式繼承JavaScript繼承原型
- Java入門系列-16-繼承Java繼承
- Java核心技術筆記 繼承Java筆記繼承
- Java 自學 - 介面與繼承 介面Java繼承
- 繼承繼承
- 《Java核心技術》第五章 繼承 學習筆記Java繼承筆記
- JavaScript 複習之 物件的繼承JavaScript物件繼承
- C++中公有繼承、保護繼承、私有繼承的區別C++繼承
- JAVA物件導向高階:繼承:許可權修飾符(繼承注意事項) 單繼承 Object類 方法重寫Java物件繼承Object
- day23:單繼承&多繼承&菱形繼承&__init__魔術方法繼承
- JAVA物件導向高階一:繼承Java物件繼承
- Java中介面與繼承的區別Java繼承