java8-4 多态的练习以及题目

1、
/*
多态练习:猫狗案例
*/

 1 class Animal {
 2 public void eat(){
 3 System.out.println("吃饭");
 4 }
 5 }
 6
 7 class Dog extends Animal {
 8 public void eat() {
 9 System.out.println("狗吃肉");
10 }
11
12 public void lookDoor() {
13 System.out.println("狗看门");
14 }
15 }
16
17 class Cat extends Animal {
18 public void eat() {
19 System.out.println("猫吃鱼");
20 }
21
22 public void playGame() {
23 System.out.println("猫捉迷藏");
24 }
25 }
26
27 class DuoTaiTest {
28 public static void main(String[] args) {
29 //定义为狗
30 Animal a = new Dog();
31 a.eat();
32 System.out.println("--------------");
33 //还原成狗
34 Dog d = (Dog)a;
35 d.eat();
36 d.lookDoor();
37 System.out.println("--------------");
38 //变成猫
39 a = new Cat();
40 a.eat();
41 System.out.println("--------------");
42 //还原成猫
43 Cat c = (Cat)a;
44 c.eat();
45 c.playGame();
46 System.out.println("--------------");
47
48 //演示错误的内容
49 //Dog dd = new Animal();
50 //Dog ddd = new Cat();
51 //ClassCastException
52 //Dog dd = (Dog)a;
53 }
54 }

2、不同地方饮食文化不同的案例

 1 class Person {
 2 public void eat() {
 3 System.out.println("吃饭");
 4 }
 5 }
 6
 7 class SouthPerson extends Person {
 8 public void eat() {
 9 System.out.println("炒菜,吃米饭");
10 }
11
12 public void jingShang() {
13 System.out.println("经商");
14 }
15 }
16
17 class NorthPerson extends Person {
18 public void eat() {
19 System.out.println("炖菜,吃馒头");
20 }
21
22 public void yanJiu() {
23 System.out.println("研究");
24 }
25 }
26
27 class DuoTaiTest2 {
28 public static void main(String[] args) {
29 //测试
30 //南方人
31 Person p = new SouthPerson();
32 p.eat();
33 System.out.println("-------------");
34 SouthPerson sp = (SouthPerson)p;
35 sp.eat();
36 sp.jingShang();
37 System.out.println("-------------");
38
39 //北方人
40 p = new NorthPerson();
41 p.eat();
42 System.out.println("-------------");
43 NorthPerson np = (NorthPerson)p;
44 np.eat();
45 np.yanJiu();
46 }
47 }

题目:

1、看程序写结果:先判断有没有问题,如果没有,写出结果

 1 class Fu {
 2 public void show() {
 3 System.out.println("fu show");
 4 }
 5 }
 6
 7 class Zi extends Fu {
 8 public void show() {
 9 System.out.println("zi show");
10 }
11
12 public void method() {
13 System.out.println("zi method");
14 }
15 }
16
17 class DuoTaiTest3 {
18 public static void main(String[] args) {
19 Fu f = new Zi();
20 f.method();
21 f.show();
22 }
23 } 

答案是:  出错,f.method()这里出错,父类没有这个方法

2、看程序写结果:先判断有没有问题,如果没有,写出结果

 1 class A {
 2 public void show() {
 3 show2();
 4 }
 5 public void show2() {
 6 System.out.println("我");
 7 }
 8 }
 9 class B extends A {
10 public void show2() {
11 System.out.println("爱");
12 }
13 }
14 class C extends B {
15 public void show() {
16 super.show();
17 }
18 public void show2() {
19 System.out.println("你");
20 }
21 }
22 public class DuoTaiTest4 {
23 public static void main(String[] args) {
24 A a = new B();
25 a.show();
26
27 B b = new C();
28 b.show();
29 }
30 }

//答案是 爱你 。
public void show() {
show2();
}   默认在B类的show2前面

多态的成员访问特点:
方法:编译看左边,运行看右边。

继承的时候:
子类中有和父类中一样的方法,叫重写。
子类中没有父亲中出现过的方法,方法就被继承过来了。

时间: 2024-12-26 12:45:22

java8-4 多态的练习以及题目的相关文章

一道理解虚函数(多态)机制的题目

一道理解虚函数(多态)机制的题目(摘抄) 以下程序输出为 class Base { public: Base(int j): i(j) {} virtual~Base() {} void func1() { i *= 10; func2(); } int getValue() { return i; } protected: virtual void func2() { i++; } protected: int i; }; class Child: public Base { public:

201521123117 《Java程序设计》第6周学习总结

1. 本周学习总结 2. 书面作业 Q1.clone方法 1.Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 答:在自定义的类中覆盖clone方法时需要注意:首先明确通常我们利用Object类的clone方法是为了获取对象的一份拷贝.Object对象中的clone方法是被protected修饰,而为了让其它类能调用这个clone类的clone()方法,我们在重载之后应该把clone()方法的属性设置为public. 2.自己设计类时

201521123088《Java程序设计》第6周学习总结

1. 本周学习总结 2. 书面作业 clone方法1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?                                                                                     答:覆盖clone方法要先将属性设置为public型.1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明.    

201521044091 《Java学习笔记》 第六周学习总结

1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结.注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可.注2:颜色要少.连线不要复杂,必要的时候要在连线上进行说明. 2. 书面作业 1.clone方法 1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 答:(1)自定义的类中要实现Cloneable接口,如果没有

201521123105 第六周Java学习总结

1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 1.clone方法1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?实现克隆必须实现Cloneable接口,被protected(受保护访问)修饰就只能在类内部和同一个包内使用,其他类要调用必须声明为public.只能在本类内部或者和Object同包的地方使用,而不能在其他

201521123089《Java程序设计》第6周学习总结

1. 本周学习总结 2. 书面作业 clone方法1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?                                                                                                                                                                      

201521123040 《Java程序设计》第6周学习总结

1.本章学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 clone方法1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? (1)protected修饰的方法只允许其子类调用,而外部类则是不允许调用该方法的. (2)利用Object类的clone方法,自定义类中的方法的名称要与Object.clone中的名称相同. (3)其返回值必

201521123087 《Java程序设计》第6周学习总结

1. 本周学习总结 2. 书面作业 clone方法1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?                                                                                                                                                                      

201521123045 《Java程序设计》第6周学习总结

Java 第六周总结 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结.注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可.注2:颜色要少.连线不要复杂,必要的时候要在连线上进行说明. 2. 书面作业 1.clone方法 1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 1.2 自己设计类时,一般对什么样的方