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

     

  • 相关阅读:
    JSON
    vue中跳转页面逻辑
    生命周期的几个阶段
    vue学习大纲
    Vue留言 checked框案列
    Vue内容
    linux -- iptables
    linux --- DNS
    linux --- samba
    linux --- vsftp
  • 原文地址:https://www.cnblogs.com/songzongyuan-java/p/9319094.html
Copyright © 2020-2023  润新知