7.16LJY
多态作业
一、 选择题
1. |
关于Java中的多态,以下说法不正确的为( B )。(选择一项) |
|
|
|
|
|
A |
多态不仅可以减少代码量,还可以提高代码的可扩展性和可维护性 |
|
B. |
把子类转换为父类,称为向下转型,自动进行类型转换 |
|
C. |
多态是指同一个实现接口,使用不同的实例而执行不同的操作 |
|
D. |
继承是多态的基础,没有继承就没有多态 |
2. |
编译运行如下Java代码,输出结果是( C )。(选择一项) |
|
|
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中,关于引用数据类型的类型转换说法正确的是( 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,编译错误 |
二、 判断题
- 将子类对象赋给父类引用变量,称为向下转型,将无法访问子类特有的方法。( false )
- 继承是多态的基础,没有继承就没有多态。( true )
三、 简答题
- 多态的含义和作用
事物存在的多种形态。
* B:多态前提
* a:要有继承关系。
* b:要有方法重写
* c:要有父类引用指向子类对象。
可以当作形式参数,可以接收任意子类对象 Peron p = new Superman();
- 向上转型和向下转型
向上转型; 父类引用指向子类对象;
向下转型;’SuperMan sm = (SuperMan)p;向下转型 :记住 一定是先有向上转型之后才有向下转型,将父类引用强制转换成子类引用,可以使用子类特有的属性,方法.
四、 编码题
- 编写程序实现比萨制作。需求说明编写程序,接收用户输入的信息,选择需要制作的比萨。可供选择的比萨有:培根比萨和海鲜比萨。
实现思路及关键代码
1) 分析培根比萨和海鲜比萨
2) 定义比萨类
3) 属性:名称、价格、大小
4) 方法:展示
5) 定义培根比萨和海鲜比萨继承自比萨类
6) 定义比萨工厂类,根据输入信息产生具体的比萨对象
程序运行结果如图所示
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想制作的披萨1-培根披萨,2-海鲜披萨");
int i = sc.nextInt();
if (i == 1) {
MeatPizza m = new MeatPizza();
m.in();
m.show();
}else if (i == 2) {
SeaPizza s = new SeaPizza();
s.in();
s.show();
}else System.out.println("输入错误");
}
}
abstract class Pizza {
private String name;
private int price;
private String size;
public Pizza() {
super();
}
public Pizza(String name, int price, String 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 String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public abstract void show() ;
}
class SeaPizza extends Pizza {
String a ;
public SeaPizza() {
super();
}
public SeaPizza(String name, int price, String size) {
super(name, price, size);
}
public void in() {
System.out.println();
setName("海鲜披萨");
Scanner sc = new Scanner(System.in);
System.out.println("请输入披萨配料");
a = sc.nextLine();
System.out.println("请输入披萨大小");
String s = sc.nextLine();
setSize(s);
System.out.println("请输入价格");
setPrice(sc.nextInt());
}
public void show( ) {
System.out.println("名称:" + "\t " + getName());
System.out.println("价格:" + "\t " +getPrice());
System.out.println("尺寸:"+ "\t " +getSize());
System.out.println("配料:"+ "\t " + a);
}
}
class MeatPizza extends Pizza {
String a ;
public MeatPizza() {
super();
}
public MeatPizza(String name, int price, String size) {
super(name, price, size);
}
public void in() {
System.out.println();
setName("培根披萨");
Scanner sc = new Scanner(System.in);
System.out.println("请输入培根克数");
a = sc.nextLine();
System.out.println("请输入披萨大小");
String s = sc.nextLine();
setSize(s);
System.out.println("请输入价格");
setPrice(sc.nextInt());
}
public void show( ) {
System.out.println("名称:" + "\t " + getName());
System.out.println("价格:" + "\t " +getPrice());
System.out.println("尺寸:"+ "\t " +getSize());
System.out.println("培根克数:"+ "\t " + a);
}
}
五、 可选题
- 编写程序实现软料购买:编写程序,接收用户输入的信息,选择购买的饮料。可供选择的饮料有:咖啡、矿泉水和可乐。其中,购买咖啡时可以选择:加糖、加奶还是什么都不加。购买可乐时可以选择:买可口可乐还是百事可乐。
程序运行效果如图所示。
import java.util.Scanner;
class Test1 {
static int Capacity;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请选择饮料: (1 - 矿泉水 2 - 咖啡 3 - 可乐 )");
int i = sc.nextInt();
switch (i) {
case 1: Cap();
Drink w = new Water(Capacity,"矿泉水");
print(w);
break;
case 2:Cap();
Coffee co = new Coffee(Capacity,"咖啡");
co.Function();
System.out.println("你购买的信息如下");
System.out.println(co.getKind());
System.out.println(co.extra);
System.out.println(Capacity);
break;
case 3: Cap();
Drink c = new Cola(Capacity,"可乐");
c.Function();
print(c);
break;
}
}
public static void Cap() {
Scanner sc = new Scanner(System.in);
System.out.println("输入购买容量");
Capacity = sc.nextInt();
}
public static void print(Drink d) {
System.out.println("你购买的信息如下");
if (d.getKind() = "可乐") {
System.out.println(d.getKind());
}
System.out.println(d.getKind());
System.out.println(Capacity);
}
}
/*1.编写程序实现软料购买:编写程序,接收用户输入的信息,选择购买的饮料。
可供选择的饮料有:咖啡、矿泉水和可乐。其中,购买咖啡时可以选择:加糖、加奶还是什么都不加。
购买可乐时可以选择:买可口可乐还是百事可乐。
程序运行效果如图所示。*/
abstract
class Drink {
private int capacity;
private String kind;
public Drink() {}
public Drink(int capacity,String kind) {
this.capacity = capacity;
this.kind = kind;
}
public void setCapacity(int Capacity) {
this.capacity = Capacity;
}
public int getCapacity() {
return capacity;
}
public void setKind(String Capacity) {
this.kind = kind;
}
public String getKind() {
return kind;
}
public abstract void Function();
}
class Water extends Drink{
public Water() {}
public Water(int capacity , String kind) {
super(capacity , kind);
}
public void Function(){};
}
class Coffee extends Drink {
String extra;
public Coffee() {}
public Coffee(int capacity,String kind) {
super(capacity,kind);
}
public void Function() {
Scanner sc = new Scanner(System.in);
System.out.println("请问是否要加配料: (1 - 加糖 2 - 加奶 3 - 什么也不加)");
int i = sc.nextInt();
if (i == 1) {
extra = "加糖";
}else if (i == 2) {
extra = "加奶";
}else extra = "什么也不加";
}
}
class Cola extends Drink {
public Cola() {}
public Cola(int capacity,String kind) {
super(capacity,kind);
}
public void Function() {
Scanner sc = new Scanner(System.in);
System.out.println("选择可乐: (1 - 可口可乐 2 - 百事可乐 )");
int i = sc.nextInt();
if (i == 1) {
setKind("可口可乐");
}else if (i == 2) {
setKind("百事可乐");
}else System.out.println("输入错误");
}
}