课堂作业(多态)

一、动手动脑

1、源代码:

 1 public class ParentChildTest {
 2     public static void main(String[] args) {
 3         Parent parent=new Parent();
 4         parent.printValue();
 5         Child child=new Child();
 6         child.printValue();
 7
 8         parent=child;
 9         parent.printValue();
10
11         parent.myValue++;
12         parent.printValue();
13
14         ((Child)parent).myValue++;
15         parent.printValue();
16
17     }
18 }
19
20 class Parent{
21     public int myValue=100;
22     public void printValue() {
23         System.out.println("Parent.printValue(),myValue="+myValue);
24     }
25 }
26 class Child extends Parent{
27     public int myValue=200;
28     public void printValue() {
29         System.out.println("Child.printValue(),myValue="+myValue);
30     }
31 }

2、实验截图:

3、结果分析:

当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定。

对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
如果子类被当作父类使用,则通过子类访问的字段是父类的!

二、动手动脑 动物园(使用接口代替抽象基类)

1、源代码:

 1 import java.util.Vector;
 2 public class zoo4 {
 3     public static void main(String[] args) {
 4          Feeder f = new Feeder("小李");
 5          Vector<Animal> ans = new Vector<Animal>();
 6
 7          //饲养员小李喂养一只狮子
 8          ans.add(new Lion());
 9          //饲养员小李喂养十只猴子
10          for (int i = 0; i < 10; i++) {
11              ans.add(new Monkey());
12          }
13          //饲养员小李喂养5只鸽子
14          for (int i = 0; i < 5; i++) {
15              ans.add(new Pigeon());
16          }
17
18          f.feedAnimals(ans);
19    }
20 }
21
22 class Feeder {//饲养员类
23     public String name;
24     Feeder(String name) {
25         this.name = name;
26     }
27     public void feedAnimals(Vector<Animal> ans) {
28         for (Animal an : ans) {
29             an.eat();
30             }
31         }
32 }
33
34 interface Animal {//动物基类
35     public abstract void eat();
36         }
37
38 class Lion implements Animal {//狮子类
39     public void eat() {
40         System.out.println("我不吃肉谁敢吃肉!");
41             }
42 }
43
44 class Monkey implements Animal {//猴子类
45     public void eat() {
46         System.out.println("我什么都吃,尤其喜欢香蕉。");
47             }
48 }
49
50 class Pigeon implements Animal {
51     public void eat() {
52         System.out.println("我要减肥,所以每天只吃一点大米。");
53         }
54 }

2、实验截图:

三、动手动脑

1、源代码:

2、实验截图:

时间: 2025-01-06 12:27:53

课堂作业(多态)的相关文章

软件工程概论课堂作业3

题目:返回一个整数数组中最大子数组的和 要求: 输入一个一维整形数组,数组里有正数也有负数. 一维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 设计思想: 用户自定义数组长度并依次输入数组元素,设一个全局变量初始化为零的数组a[N],N=10000: 1.因为该数组首尾相接可视作一个环,那么我们需要在一个合适的位置断开,把数组元素展成一条笔直的带子. (1).设用户自定义数组长度为m,输入数组各元素值a[1

软件工程课堂作业04

软件工程课堂作业04 源代码: 1 package jian; 2 import java.io.*; 3 import java.util.Scanner; 4 public class Point3D{ 5 public static int Lenght(int list[],int lenght) 6 { 7 int i,max; 8 max=list[0]; 9 for(i=1;i<=(lenght-1);i++) 10 { 11 if(list[i]>max) 12 { 13 ma

课堂作业及 动手动脑问题整理

课堂作业一 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 程序: package com; public class Duixiang { public static void main(String[] args){ duixiang a=new duixiang(); a.out(); duixiang b=new duixiang(); b.out(); } } class duixiang{ stati

课堂作业数组最大和

题目: 输入一个一维整形数组,数组里有正数也有负数. 一维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选).源代码.结果截图.总结. 设计思想: 1.设计思想: 首先设置两个变量,分别用来存储数组长度也就是number和结果result:然后再通过语句来询问用户需要的数组长度再设个动态数组用来让用户输入数组中的数字,将每一个数值都存放进数组对应位

课堂作业05继承与多态

第七讲  继承与多态 一.为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来? 1. 由于子类是继承父类的,所以想用子类创建对象时,必须先创建父类的对象,这样子类才能有父类的属性和方法.在创建对象时如果父类的数据需要进行初始化,那么就需要调用父类的构造函数,使构造函数初始化. 2. 不能反过来 3. 原因:因为父类不知道子类有什么属性,而且反过来子类也不能得到父类初始化的变量. 二.运行以下测试代码: 1. 左边的程序运行结果是什么? 1. 你如何解释会得到这

课堂作业8多态

结果截图: 结果分析:前俩组定义自己的变量,使用自己方法,第三组用子类的方法变量,最后一个父类变量,子类方法,最后一个,是强制转化. Java语法: 1.当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的"真实"类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法. 2.如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段).如果子类方法

课堂作业01

我们都了解过或在课堂上听说过软件体系架构师这一职业,对我们来说软件体系架构师是一个需要很多经验和技术的职业,也会是很多人奋斗的目标,那么什么是软件体系架构师以及软件体系架构师的职责是什么呢? 软件体系架构师是软件行业中一种新兴职业,是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划.主导系统全局分析设计和实施.负责软件构架和关键技术决策的人员,是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节

第八次课后作业多态的一些问题

第一题: 结果: 结果分析: 当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的"真实"类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法. 这个特性实际上就是面向对象"多态"特性的具体表现. 如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段).如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字

第九周课堂作业

一.怎样判断对象是否可以转换? 可以使用instanceof运算符判断一个对象是否可以转换为指定的类型: 程序截图: 结果截图: 二.类型转换 实验截图: 结论:子类可直接赋给基类(“基类变量=子类对象”):基类的引用类型要传递给子类必须通过强制转换(“子类变量=(子类名)基类对象”):子类之间不可以进行转换. 三.变态类 程序截图: 程序截图: 原因及结论: 当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类