4.8 多态

4月8日
练习
一、选择

下列代码的运行结果为:C
在这里插入图片描述

A. 我是动物
B. 编译错误
C. 我是动物
我是老虎
我是哈士奇
D. 我是动物 我是老虎 我是哈士奇

创建一个父类Animal,一个子类Cat,Animal three = new Cat();不是C
A. 向上转型
B. 自动转型
C. 向下转型
D. 隐式转型

下列代码怎么修改可以使其成功运行:A
在这里插入图片描述

A. 删除掉标注3位置的one.fly( )
B. 标注1的Animal one=new Bird()修改为Animal one=new Animal()
C. 删除掉标注2位置的one.eat( )
D. 标注1的Animal one=new Bird()修改为Bird one=new Animal()

下列关于instanceof说法不正确的是C
A. instanceof 的返回值为true和false
B. instanceof可以用来判断对象是否可满足某个特定类型
C. 可以通过“A instanceof B"表示 A 类可以转型为B类
D. instanceof可放在if语句的条件表达式中

已知父类Person,子类Man。判断类Person的对象person1是否满足类Man的实例特征,正确的语句为A
在这里插入图片描述

A. if (person1 instanceof Man)
B. if (man1 instanceof Person)
C. if (Person instanceof man1)
D. if (Man instanceof person1)

在Java中,多态的实现不仅能减少编码的工作量,还能大大提高程序的可维护性及可扩展性,那么实现多态的步骤包括以下几个方面除了B
A. 子类重写父类的方法
B. 子类方法设置为final类型
C. 定义方法时,把父类类型作为参数类型;调用方法时,把父类或子类的对象作为参数传入方法
D. 运行时,根据实际创建的对象类型动态决定使用哪个方法
下面代码运行测试后,出现的结果是B
在这里插入图片描述

A. 编译错误,错误位置在第一行
B. 编译错误,错误位置在第二行
C. 第一行和第二行都运行成功,输出结果为
儿子
女儿
D. 编译成功,但运行报错,错误位置在第二行

下面代码怎么修改可以编译时不报错(多选)CD
在这里插入图片描述

A. 在位置一处将SpeedBike类设为抽象类,同时将位置2处的speedup也设为抽象方法
B. 将位置一中的public改为final
C. 将位置二中speedup()方法改为抽象方法
D. 将位置二中speedup()方法中加入方法的实现

下列选项中,关于Java的抽象类和抽象方法说法不正确的是BD
A. 抽象类和抽象方法都通过abstract关键字来修饰
B. 抽象类中必须包含抽象方法
C. 抽象方法只有方法声明,没有方法实现
D. 子类如果不重写父类所有的抽象方法,则必须设置为抽象类
二、编程

应用继承和多态的思想,编写动物类,成员方法是动物叫声。写三个具体的类(猫、狗、羊),它们都是动物类的子类,并重写父类的成员方法。编写测试类,随机产生三种具体动物,调用叫声这个方法。
程序参考运行效果如图所示:

任务分析:

  1.  定义一个父类Animal类
    

属性:kind(种类)
方法:创建带参(kind为参数)构造方法
创建cry():void方法
2. 编写三个具体的子类Cat类、Dog类、Sheep类
分别重写父类中的 cry() 方法,输出信息分别为
Cat类:小猫的叫声:喵喵喵~~~
Dog类:小狗的叫声:汪汪汪~~~
Sheep类:小羊的叫声:咩咩咩~~~
3. 编写测试类,首先生成长度为5的父类对象数组,然后通过循环依次向数组中存入数据,现设定存储规则为:
a) 每次随机产生一个0~2的正整数
b) 若数值为 0,则生成一个 Cat 类的对象,存入数组
c) 若数值为 1,则生成一个 Dog 类的对象,存入数组
d) 若数值为 2,则生成一个 Sheep 类的对象,存入数组
最后循环输出数组成员,并分别调用 cry() 方法。

package animal;

public class Test {
	public static void main(String[] args) {
//		Dog d = new Dog();
//		d.cry();
		
		Animal[] Aarr = new Animal[5];//定义类型为Animal类型的数组,一共5个元素
		
		for(int i = 0; i<Aarr.length; i++) {
			int d = (int)(Math.random()*3);
			switch(d) {
				case 0 : {
//					System.out.println(1);
					Aarr[i] = new Cat(); 
					break;
				}
				case 1 : {
//					System.out.println(2);
					Aarr[i] = new Dog(); 
					break;
				}
				case 2 : {
//					System.out.println(3);
					Aarr[i] = new Sheep(); 
					
					break;
				}
			}
//			System.out.println(d);
		}
		for(Animal an : Aarr){
			System.out.println(an);
			an.cry();
		}
	
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值