多态作业
一、 选择题
1. |
关于Java中的多态,以下说法不正确的为()。(选择一项) |
|
A |
多态不仅可以减少代码量,还可以提高代码的可扩展性和可维护性 |
|
B. |
把子类转换为父类,称为向下转型,自动进行类型转换 |
|
C. |
多态是指同一个实现接口,使用不同的实例而执行不同的操作 |
|
D. |
继承是多态的基础,没有继承就没有多态 |
2. |
编译运行如下Java代码,输出结果是( B )。(选择一项) |
|
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中,关于引用数据类型的类型转换说法正确的是( AD )。(选择二项) |
|
A |
引用数据类型的类型转换有向上转型和向下转型 |
|
B. |
向下转型,必须转换成其真实子类型,而不能随意转换 |
|
C. |
向下转型是自动进行的,也称隐式转换 |
|
D. |
向上转型可以使用instanceof操作符来判断转型的合法性 |
4. |
给定如下Java程序,Test类中的四个输出语句输出结果依次是( A )。(选择一项) |
|
|
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) 分析培根比萨和海鲜比萨
2) 定义比萨类
3) 属性:名称、价格、大小
4) 方法:展示
5) 定义培根比萨和海鲜比萨继承自比萨类
6) 定义比萨工厂类,根据输入信息产生具体的比萨对象
程序运行结果如图所示
import java.util.Scanner;//导包
class Task1_Pizza {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
System.out.print("请输入想要制作的比萨(1.培根比萨 2.海鲜比萨)");
int i=sc.nextInt();
if(i==1){
System.out.println("请输入培根克数:");
int g=sc.nextInt();
System.out.println("请输入比萨大小:");
String size=sc.next();
System.out.println("请输入比萨价格:");
int price=sc.nextInt();
Pizza n=new BaconPizza("培根披萨", price, size);
((BaconPizza) n).name();
((BaconPizza) n).price();
((BaconPizza) n).size();
System.out.println("培根克数:"+g);
}
if(i==2){
System.out.println("请输入配料信息:");
Scanner sc1=new Scanner(System.in);
String a=sc1.next();
System.out.println("请输入比萨大小:");
String size=sc1.next();
System.out.println("请输入比萨价格:");
int price=sc1.nextInt();
SeafoodPizza n=new SeafoodPizza("海鲜比萨", price, size);
n.name();
n.price();
n.size();
System.out.println("配料:"+a);
}
}
}
//属性:名称name、价格price、大小size
class Pizza {
String name;
int price;
String size;
public Pizza(String name,int price,String size){
this.name=name;
this.price=price;
this.size=size;
}
}
//培根比萨
class BaconPizza extends Pizza {
double g;
public BaconPizza(String name,int price,String size){
super(name,price,size);
}
public void name(){
System.out.println("名称:"+name);
}
public void price(){
System.out.println("价格:"+price+"元");
}
public void size(){
System.out.println("大小:"+size+"寸");
}
public void g(){
System.out.println("培根克数:"+g);
}
}
//海鲜比萨
class SeafoodPizza extends Pizza{
String dosing;
public SeafoodPizza(String name,int price,String size){
super(name, price, size);
}
public void name(){
System.out.println("名称:"+name);
}
public void price(){
System.out.println("价格:"+price+"元");
}
public void size(){
System.out.println("尺寸:"+size+"寸");
}
public void dosing(){
System.out.println("配料:"+dosing);
}
}
五、 可选题
- 编写程序实现软料购买:编写程序,接收用户输入的信息,选择购买的饮料。可供选择的饮料有:咖啡、矿泉水和可乐。其中,购买咖啡时可以选择:加糖、加奶还是什么都不加。购买可乐时可以选择:买可口可乐还是百事可乐。
程序运行效果如图所示。
import java.util.Scanner;
public class Task2_Drinks {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请选择:1.咖啡,2.矿泉水,3.可乐");
switch (sc.nextInt()) {
case 1:
System.out.println("请输入购买的容量:");
Coffee c = new Coffee();
c.volume = sc.next();
c.name = "咖啡";
System.out.println("请选择配料:1.加糖,2.加奶,3.什么都不加");
switch (sc.nextInt()) {
case 1:
c.setPl("加糖");
break;
case 2:
c.setPl("加奶");
break;
case 3:
c.setPl("什么都不加");
break;
}
c.info();
break;
case 2:
System.out.println("请输入购买的容量:");
Water w = new Water();
w.volume = sc.next();
w.name = "矿泉水";
w.info();
break;
case 3:
System.out.println("请输入购买的容量:");
Cola co = new Cola();
co.volume = sc.next();
co.name = "可乐";
System.out.println("请选择品牌:1.可口可乐,2.百事可乐");
switch (sc.nextInt()) {
case 1:
co.setPp("可口可乐");
break;
case 2:
co.setPp("百事可乐");
break;
}
co.info();
break;
}
}
}
abstract class Drink {
String name;
String volume;
public abstract void info();
}
class Coffee extends Drink{
private String pl;
public void info() {
System.out.println("名称:"+name);
System.out.println("配料:"+pl);
System.out.println("容量:"+volume);
}
public String getPl() {
return pl;
}
public void setPl(String pl) {
this.pl = pl;
}
}
class Water extends Drink{
public void info() {
System.out.println("名称:"+name);
System.out.println("容量:"+volume);
}
}
class Cola extends Drink {
private String pp;
public void info() {
System.out.println("名称:"+name);
System.out.println("品牌:"+pp);
System.out.println("容量:"+volume);
}
public String getPp() {
return pp;
}
public void setPp(String pp) {
this.pp = pp;
}
}