7.16 作業 韓宗軒
多態作業
一、 選擇題
1. |
關於Java中的多態,以下說法不正確的為( B )。(選擇一項) |
|
|
|
|
|
A |
多態不僅可以減少代碼量,還可以提高代碼的可擴展性和可維護性 |
|
B. |
把子類轉換為父類,稱為向下轉型,自動進行類型轉換 |
|
C. |
多態是指同一個實現接口,使用不同的實例而執行不同的操作 |
|
D. |
繼承是多態的基礎,沒有繼承就沒有多態 |
2. |
編譯運行如下Java代碼,輸出結果是( D )。(選擇一項) |
|
|
class Base { public void method(){ System.out.print ("Base method"); } } class Child extends Base{ public void methodB(){ System.out.print ("Child methodB"); } } class Sample { public static void main(String[] args) { Base base= new base.methodB(); } } |
|
|
|
|
|
A |
Base method |
|
B. |
Child methodB |
|
C. |
Base method Child methodB |
|
D. |
編譯錯誤 |
3. |
在Java中,關於引用數據類型的類型轉換說法正確的是( AB )。(選擇二項) |
|
|
|
|
|
A |
引用數據類型的類型轉換有向上轉型和向下轉型 |
|
B. |
向下轉型,必須轉換成其真實子類型,而不能隨意轉換 |
|
C. |
向下轉型是自動進行的,也稱隱式轉換 |
|
D. |
向上轉型可以使用instanceof操作符來判斷轉型的合法性 |
4. |
給定如下Java程序,Test類中的四個輸出語句輸出結果依次是( c )。(選擇一項) |
|
|
class Person { String name="person"; public void shout(){ System.out.println(name); } } class Student extends Person{ String name="student"; String school="school"; } public class Test { public static void main(String[ ] args) { Person p=new Student(); System.out.println(p instanceof Student); System.out.println(p instanceof Person); System.out.println(p instanceof Object);; System.out.println(p instanceof System); } } |
|
|
|
|
|
A |
true,false,true,false |
|
B. |
false,true,false,false |
|
C. |
true,true,true,編譯錯誤 |
|
D. |
true,true,false,編譯錯誤 |
二、 判斷題
- 將子類對象賦給父類引用變量,稱為向下轉型,將無法訪問子類特有的方法。( F )
- 繼承是多態的基礎,沒有繼承就沒有多態。( T )
三、 簡答題
- 多態的含義和作用
事物存在的多種形態。
多態不僅可以減少代碼量,還可以提高代碼的可擴展性和可維護性
- 向上轉型和向下轉型
Person p = new SuperMan();向上轉型 :父類引用指向子類對象就是向上轉型;
SuperMan sm = (SuperMan)p;向下轉型 : 將子類對象賦給父類引用變量
**記住 一定是先有向上轉型之後才有向下轉型**
四、 編碼題
- 編寫程序實現比薩制作。需求說明編寫程序,接收用戶輸入的信息,選擇需要制作的比薩。可供選擇的比薩有:培根比薩和海鮮比薩。
實現思路及關鍵代碼
1) 分析培根比薩和海鮮比薩
2) 定義比薩類
3) 屬性:名稱、價格、大小
4) 方法:展示
5) 定義培根比薩和海鮮比薩繼承自比薩類
6) 定義比薩工廠類,根據輸入信息產生具體的比薩對象
程序運行結果如圖所示
public class TestMain5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Pizza pizza = PizzaFactory.getMyPizz();
if(pizza != null){
pizza.show();
}
}
}
package com.polymorphism.task;
import java.util.Scanner;
public class PizzaFactory {
public static Pizza getMyPizz(){
Pizza pizza = null;
System.out.println("請選擇想要制作的披薩(1. 培根披薩 2.海鮮披薩):");
@SuppressWarnings("resource")
Scanner sca = new Scanner(System.in);
int temp = sca.nextInt();
if(temp == 1){
BaconPizza pizza1 = new BaconPizza();
pizza1.setName("培根披薩");
System.out.println("請輸入培根克數:");
int temp2 = sca.nextInt();
pizza1.setBaconWeight(temp2);
System.out.println("請輸入披薩大小:");
temp2 = sca.nextInt();
pizza1.setSize(temp2);
System.out.println("請輸入披薩價格:");
temp2 = sca.nextInt();
pizza1.setPrice(temp2);
return pizza1;
}
else if(temp == 2){
SeafoodPizza pizza2 = new SeafoodPizza();
pizza2.setName("海鮮披薩");
System.out.println("請輸入配料信息:");
String temp3 = sca.next();
pizza2.setIngredient(temp3);
System.out.println("請輸入披薩大小:");
int temp2 = sca.nextInt();
pizza2.setSize(temp2);
System.out.println("請輸入披薩價格:");
temp2 = sca.nextInt();
pizza2.setPrice(temp2);
return pizza2;
}
else {
System.out.println("沒有選擇種類!");
return null;
}
}
}
package com.polymorphism.task;
public class Pizza {
private String name;
private int price;
private int size;
public String toString(Pizza pizza){
return "名稱: "+pizza.getName()+"\n"+"價格: "+pizza.getPrice()+"元"+"\n"+"大小: "+pizza.getSize()+"寸";
}
public void show(){
System.out.println(this.toString(this));
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
package com.polymorphism.task;
public class SeafoodPizza extends Pizza{
private String ingredient;
public String toString(SeafoodPizza seafoodpizza){
return super.toString(seafoodpizza)+"\n"+"配料:"+seafoodpizza.getIngredient();
}
public void show(){
System.out.println(this.toString(this));
}
public String getIngredient() {
return ingredient;
}
public void setIngredient(String ingredient) {
this.ingredient = ingredient;
}
}
package com.polymorphism.task;
public class BaconPizza extends Pizza {
private int baconWeight;
public String toString(BaconPizza baconpizza){
return super.toString(baconpizza)+"\n"+"培根克數:"+baconpizza.getBaconWeight();
}
public void show(){
System.out.println(this.toString(this));
}
public int getBaconWeight() {
return baconWeight;
}
public void setBaconWeight(int baconWeight) {
this.baconWeight = baconWeight;
}
}
五、 可選題
- 編寫程序實現軟料購買:編寫程序,接收用戶輸入的信息,選擇購買的飲料。可供選擇的飲料有:咖啡、礦泉水和可樂。其中,購買咖啡時可以選擇:加糖、加奶還是什麽都不加。購買可樂時可以選擇:買可口可樂還是百事可樂。
程序運行效果如圖所示。
package cn.pxd.drink;
public class Drink {
private double buyNum;
private String name;
public double getBuyNum() {
return buyNum;
}
public void setBuyNum(double buyNum) {
this.buyNum = buyNum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
void show(){
}
}
package cn.pxd.drink;
import java.util.Scanner;
public class Coffee extends Drink{
static String add;
void show(){
System.out.println("您購買飲料信息如下。\n 名稱: "+this.getName()+"\n添加配料: "+
this.add+"\n容量: "+this.getBuyNum());
}
}
package cn.pxd.drink;
public class Water extends Drink{
}
package cn.pxd.drink;
public class Colar extends Drink{
static String type;
void show(){
System.out.println("可樂種類: "+Colar.type);
}
}
package cn.pxd.drink;
import java.util.Scanner;
public class DrinkFctory {
public static Drink selectDrink(int which){
Scanner sc=new Scanner(System.in);
Drink d= null;
if(which==1){
d=new Coffee();
d.setName("咖啡");
System.out.println("請輸入購買容量:");
d.setBuyNum(sc.nextDouble());
System.out.println("\n請問是否要配料: (1、加糖 2、加奶 3、什麽都不加)");
int n=sc.nextInt();
switch(n){
case 1: Coffee.add="加糖";
break;
case 2: Coffee.add="加奶";
break;
case 3: Coffee.add="什麽都不加";
break;
default:break;
}
}else if(which==2){
d=new Water();
d.setName("礦泉水");
}else if(which==3){
d=new Colar();
d.setName("可樂");
System.out.println("請選擇牌子 (1、可口可樂 2、百事可樂)");
int n=sc.nextInt();
switch(n){
case 1: Colar.type="可口可樂";
break;
case 2: Colar.type="百事可樂";
break;
default:break;
}
}
return d;
}
}
package cn.pxd.drink;
import java.util.Scanner;
public class TestDrink {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("請選擇飲料 (1、咖啡 2、礦泉水 3、可樂): ");
int n=sc.nextInt();
Drink d=DrinkFctory.selectDrink(n);
d.show();
}
}
7.16 作業 韓宗軒