1. 程式人生 > >7.16 作業 韓宗軒

7.16 作業 韓宗軒

private extend 上轉型 ret 大小 運行 cell 作業 sch

多態作業

一、 選擇題

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

Child();

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,編譯錯誤

二、 判斷題

  1. 將子類對象賦給父類引用變量,稱為向下轉型,將無法訪問子類特有的方法。( F )
  2. 繼承是多態的基礎,沒有繼承就沒有多態。( T )

三、 簡答題

  1. 多態的含義和作用
    事物存在的多種形態。

多態不僅可以減少代碼量,還可以提高代碼的可擴展性和可維護性

  1. 向上轉型和向下轉型

Person p = new SuperMan();向上轉型 :父類引用指向子類對象就是向上轉型;

SuperMan sm = (SuperMan)p;向下轉型 : 將子類對象賦給父類引用變量

**記住 一定是先有向上轉型之後才有向下轉型**

四、 編碼題

  1. 編寫程序實現比薩制作。需求說明編寫程序,接收用戶輸入的信息,選擇需要制作的比薩。可供選擇的比薩有:培根比薩和海鮮比薩。

實現思路及關鍵代碼

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;

}

}

五、 可選題

  1. 編寫程序實現軟料購買:編寫程序,接收用戶輸入的信息,選擇購買的飲料。可供選擇的飲料有:咖啡、礦泉水和可樂。其中,購買咖啡時可以選擇:加糖、加奶還是什麽都不加。購買可樂時可以選擇:買可口可樂還是百事可樂。

程序運行效果如圖所示。

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 作業 韓宗軒