11

多态作业

 

一、    选择题

 

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;
	} 
}

 

原文地址:https://www.cnblogs.com/songzongyuan-java/p/9319094.html