多态作业
一、 选择题
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中,关于引用数据类型的类型转换说法正确的是( a b )。(选择二项) | |
|
|
|
| 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. 将子类对象赋给父类引用变量,称为向下转型,将无法访问子类特有的方法。( cuo )
2. 继承是多态的基础,没有继承就没有多态。( dui )
三、 简答题
1. 多态的含义和作用
2. 子类继承父类,子类对象对父类对象进行重写,父类引用指向子类对象这三个条件前提下父类引用对子类方法中重写方法的调用,“一个接口,多种实现”。
3. 作用:1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承
2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 //多态的真正作用,以前需要用switch实现
4. 向上转型和向下转型
5. 向上转型:通俗地讲即是将子类对象转为父类对象。此处父类对象可以是接口。
6. 向下转型:将父类对象指向子类对象
四、 编码题
1. 编写程序实现比萨制作。需求说明编写程序,接收用户输入的信息,选择需要制作的比萨。可供选择的比萨有:培根比萨和海鲜比萨。
实现思路及关键代码
1) 分析培根比萨和海鲜比萨
2) 定义比萨类
3) 属性:名称、价格、大小
4) 方法:展示
5) 定义培根比萨和海鲜比萨继承自比萨类
6) 定义比萨工厂类,根据输入信息产生具体的比萨对象
程序运行结果如图所示
package cn.factory;
import java.util.Scanner;
public class BaconPizza extends Pizza {
static int num;
BaconPizza(){
this.setName("培根比萨");
}
public void show(){
System.out.println("名称: "+this.getName()+"\n价格: "+this.getPrice()+"元\n大小: "+
this.getSise()+"\n培根克数: "+BaconPizza.num);
}
}
package cn.factory;
import java.util.Scanner;
public class SeaPizza extends Pizza {
static String mix;
SeaPizza(){
this.setName("海鲜比萨");
}
public void show(){
System.out.println("名称: "+this.getName()+"\n价格: "+this.getPrice()+"元\n大小: "+
this.getSise()+"寸\n配料: "+SeaPizza.mix);
}
}
package cn.factory;
import java.util.Scanner;
public class Pizza {
private String name;
private double price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getSise() {
return sise;
}
public void setSise(double sise) {
this.sise = sise;
}
private double sise;
public void show(){
}
}
package cn.factory;
import java.util.Scanner;
public class PizzaFactory {
public static Pizza createPizza(int which){
Pizza p=null;
if(which==1){
p=new BaconPizza();
Scanner sc=new Scanner(System.in);
System.out.println("请输入培根克数: ");
BaconPizza.num=sc.nextInt();
System.out.println("请输入比萨大小: ");
p.setSise(sc.nextInt());
System.out.println("请输入比萨价格: ");
p.setPrice(sc.nextInt());
}
else if(which==2){
p=new SeaPizza();
Scanner sc=new Scanner(System.in);
System.out.println("请输入配料信息: ");
SeaPizza.mix=sc.next();
System.out.println("请输入比萨大小: ");
p.setSise(sc.nextInt());
System.out.println("请输入比萨价格: ");
p.setPrice(sc.nextInt());
}
return p;
}
}
package cn.factory;
import java.util.Scanner;
public class PizzaFactory {
public static Pizza createPizza(int which){
Pizza p=null;
if(which==1){
p=new BaconPizza();
Scanner sc=new Scanner(System.in);
System.out.println("请输入培根克数: ");
BaconPizza.num=sc.nextInt();
System.out.println("请输入比萨大小: ");
p.setSise(sc.nextInt());
System.out.println("请输入比萨价格: ");
p.setPrice(sc.nextInt());
}
else if(which==2){
p=new SeaPizza();
Scanner sc=new Scanner(System.in);
System.out.println("请输入配料信息: ");
SeaPizza.mix=sc.next();
System.out.println("请输入比萨大小: ");
p.setSise(sc.nextInt());
System.out.println("请输入比萨价格: ");
p.setPrice(sc.nextInt());
}
return p;
}
}
五、 可选题
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();
}
}
多态作业答案
一、 选择题
1. B
2. D
3. AB
4. C
二、 判断题
1. ×
2. √
三、 简答题
答案略
四、 编码题
1. 编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和小提琴。
/**
* 乐器类
* @author Administrator
*
*/
public class Instrument {
public void makeSound(){
System.out.println("发出声音");
}
}
/**
* 钢琴类
* @author Administrator
*
*/
public class Piano extends Instrument{
public void makeSound(){
System.out.println("钢琴声...命运交响曲...");
}
}
/**
* 小提琴类
* @author Administrator
*
*/
public class Violin extends Instrument{
public void makeSound(){
System.out.println("小提琴声音..梁祝...");
}
}
/**
* 二胡类
* @author Administrator
*
*/
public class Erhu extends Instrument{
public void makeSound(){
System.out.println("二胡声音...二泉映月..");
}
}
/**
* 乐手类
* @author Administrator
*
*/
public class Musician {
public static void play(Instrument instrument){
instrument.makeSound();
}
public static void main(String[] args) {
Instrument i1 = new Piano();
play(i1);
Instrument i2 = new Violin();
play(i2);
Instrument i3 = new Erhu();
play(i3);
}
}
2. 编写程序实现比萨制作。需求说明编写程序,接收用户输入的信息,选择需要制作的比萨。可供选择的比萨有:培根比萨和海鲜比萨。
/**
* 定义抽象类
*/
public abstract class Pizza {
private String name;
private int price;
private int size;
public Pizza() {
super();
}
public Pizza(String name, int price, int size) {
super();
this.name = name;
this.price = price;
this.size = size;
}
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;
}
public abstract void show();
}
/**
* 培根比萨
*/
public class BaconPizza extends Pizza{
private int gram;//克数
public BaconPizza() {
super();
}
public BaconPizza(String name, int price, int size, int gram) {
super(name, price, size);
this.gram = gram;
}
public int getGram() {
return gram;
}
public void setGram(int gram) {
this.gram = gram;
}
public void show() {
System.out.println("名称:"+super.getName());
System.out.println("价格:"+super.getPrice()+"元");
System.out.println("大小:"+super.getSize()+"寸");
System.out.println("培根克数:"+this.gram);
}
}
/**
* 海鲜比萨
*/
public class SeaFoodPizza extends Pizza{
private String mixture;//配料
public SeaFoodPizza() {
super();
}
public SeaFoodPizza(String name, int price, int size, String mixture) {
super(name, price, size);
this.mixture = mixture;
}
public String getMixture() {
return mixture;
}
public void setMixture(String mixture) {
this.mixture = mixture;
}
@Override
public void show() {
System.out.println("名称:"+super.getName());
System.out.println("价格:"+super.getPrice()+"元");
System.out.println("大小:"+super.getSize()+"寸");
System.out.println("配料:"+this.mixture);
}
}
/**
* 比萨制作
*/
public class PizzaFactory {
public static Pizza makePizza(){
System.out.println("请选择想要制作的比萨(1.培根比萨 2.海鲜比萨):");
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
Pizza pizza = null;
if(i==1){
//制作培根比萨
System.out.println("请输入培根克数:");
int gram = scanner.nextInt();
System.out.println("请输比萨大小:");
int size = scanner.nextInt();
System.out.println("请输入比萨价格:");
int price = scanner.nextInt();
pizza = new BaconPizza("培根比萨", price, size, gram);
}else if(i==2){
//制作海鲜比萨
System.out.println("请输入配料信息:");
String mixture = scanner.next();
System.out.println("请输比萨大小:");
int size = scanner.nextInt();
System.out.println("请输入比萨价格:");
int price = scanner.nextInt();
pizza = new SeaFoodPizza("海鲜比萨", price, size, mixture);
}
return pizza;
}
public static void main(String[] args) {
Pizza pizza = makePizza();
pizza.show();
}
}
五、 可选题
1. 编写程序实现软料购买:编写程序,接收用户输入的信息,选择购买的饮料。可供选择的饮料有:咖啡、矿泉水和可乐。其中,购买咖啡时可以选择:加糖、加奶还是什么都不加。购买可乐时可以选择:买可口可乐还是百事可乐。
//饮料类
public class Drink {
private String name;
private int volume;
public Drink() {
super();
}
public Drink(String name, int volume) {
super();
this.name = name;
this.volume = volume;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getVolume() {
return volume;
}
public void setVolume(int volume) {
this.volume = volume;
}
public void show(){
System.out.println("您购买的饮料信息如下:");
System.out.println("名称:"+name);
System.out.println("容量:"+volume);
}
}
//咖啡类
public class Coffee extends Drink{
private String mixture;//添加物
public Coffee() {
super();
}
public Coffee(String name,int volume, String mixture) {
super(name,volume);
this.mixture = mixture;
}
public String getMixture() {
return mixture;
}
public void setMixture(String mixture) {
this.mixture = mixture;
}
public void show(){
System.out.println("您购买的饮料信息如下:");
System.out.println("名称:"+super.getName());
System.out.println("添加配料:"+this.getMixture());
System.out.println("容量:"+super.getVolume());
}
}
//饮料工厂类
public class DrinkFactory {
public static Drink getDrink(String no){
Scanner input = new Scanner(System.in);
Drink drink = null;
if("1".equals(no)){
System.out.println("请输入购买容量:");
int volume = input.nextInt();
System.out.println("请问是否要配料(1、加糖 2、加奶 3、什么也不加)");
int choice = input.nextInt();
String mixture;
switch(choice){
case 1: mixture ="加糖";break;
case 2: mixture ="加奶";break;
default : mixture="什么一个不加";
}
drink = new Coffee("咖啡",volume, mixture);
}else if("2".equals(no)){
//省略
}else if("3".equals(no)){
//省略}
return drink;
}
}
//测试类
public class TestDrink {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请选择饮料(1.咖啡 2 矿泉水 3 可乐):");
String choice = input.next();
Drink drink = DrinkFactory.getDrink(choice);
drink.show();
}
}