多态作业
一、 选择题
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. 将子类对象赋给父类引用变量,称为向下转型,将无法访问子类特有的方法。( N )
2. 继承是多态的基础,没有继承就没有多态。( Y )
三、 简答题
1. 多态的含义和作用
多态的含义:事物存在的多种形态。多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来,再通过这个抽象事物与不同的具体事物对话。
多态的作用:
(1) 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理,大大提高了程序的可复用性。
(2) 派生类的功能可以被基类的方法或引用变量调用,提高了可扩充性和可维护性。
2. 向上转型和向下转型
向上转型:父类引用指向子类对象,父类 父类对象 = 子类实例
向下转型:前提要有向上转型,子类 子类对象 = (子类)父类实例
四、 编码题
1. 编写程序实现比萨制作。需求说明编写程序,接收用户输入的信息,选择需要制作的比萨。可供选择的比萨有:培根比萨和海鲜比萨。
实现思路及关键代码
1) 分析培根比萨和海鲜比萨
2) 定义比萨类
3) 属性:名称、价格、大小
4) 方法:展示
5) 定义培根比萨和海鲜比萨继承自比萨类
6) 定义比萨工厂类,根据输入信息产生具体的比萨对象
程序运行结果如图所示
代码:
import java.util.Scanner; class Test2 { public static void main(String[] args) { System.out.println("请选择想要的披萨(1.培根披萨 2.海鲜披萨)"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); if (n == 1) { PeiGen pg = new PeiGen("培根披萨"); double b=pg.peigen(); pg.display(); System.out.println("名称" + pg.name + " 价格:" + pg.price + " 大小:" + pg.size + " 培根克数:" +b); } else if (n == 2) { SeaFood sf = new SeaFood("海鲜披萨"); String a=sf.seafood(); sf.display(); System.out.println("名称" + sf.name + " 价格:" + sf.price + " 大小:" + sf.size + " 配料:" +a); } else{ System.out.println("输入错误,请看提示!"); return; } } } //父类 class Pizza { String name; double price; int size; public Pizza(String name){ this.name=name; } public void display(){ Scanner sc=new Scanner(System.in); System.out.println("请输入披萨大小:"); size=sc.nextInt(); System.out.println("请输入披萨价格:"); price=sc.nextDouble(); } } //子类培根披萨 class PeiGen extends Pizza { public PeiGen(String name) { super(name); } public double peigen() { System.out.println("输入培根克数:"); Scanner sc = new Scanner(System.in); double a = sc.nextDouble(); return a; } } //子类海鲜披萨 class SeaFood extends Pizza{ public SeaFood(String name) { super(name); } public String seafood() { System.out.println("输入配料信息:"); Scanner s=new Scanner(System.in); String peiliao=s.next(); return peiliao; } }
五、 可选题
1. 编写程序实现软料购买:编写程序,接收用户输入的信息,选择购买的饮料。可供选择的饮料有:咖啡、矿泉水和可乐。其中,购买咖啡时可以选择:加糖、加奶还是什么都不加。购买可乐时可以选择:买可口可乐还是百事可乐。
程序运行效果如图所示
代码:
import java.util.Scanner; class Test3 { public static void main(String[] args) { while (true){ 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.setBrand("可口可乐"); break; case 2: co.setBrand("百事可乐"); 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 void setPl(String pl) { this.pl = pl; } public String getPl() { return pl; } } //水类 class Water extends Drink{ public void info() { System.out.println("名称:"+name); System.out.println("容量:"+volume); } } //可乐 class Cola extends Drink { private String brand; public void info() { System.out.println("名称:"+name); System.out.println("品牌:"+brand); System.out.println("容量:"+volume); } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } }