#Java第四次作业——面向对象高级特性(继承和多态)

mac2022-06-30  100

(一)学习总结

1.学习使用思维导图对Java面向对象编程的知识点(封装、继承和多态)进行总结。

2.阅读下面程序,分析是否能编译通过?如果不能,说明原因。应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来?

class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("GrandParent Created.String:" + string); } } class Parent extends Grandparent { public Parent() { System.out.println("Parent Created"); super("Hello.Grandparent."); } } class Child extends Parent { public Child() { System.out.println("Child Created"); } } public class Test{ public static void main(String args[]) { Child c = new Child(); } }

不能通过编译 原因:构造函数调用必须是构造函数中的第一个语句,应把super()放在输出语句前。 修改:

class Parent extends Grandparent { public Parent() { super("Hello.Grandparent."); System.out.println("Parent Created"); } }

结果:

GrandParent Created.String:Hello.Grandparent. Parent Created Child Created

3 . 阅读下面程序,分析程序中存在哪些错误,说明原因,应如何改正?正确程序的运行结果是什么?

class Animal{ void shout(){ System.out.println("动物叫!"); } } class Dog extends Animal{ public void shout(){ System.out.println("汪汪......!"); } public void sleep() { System.out.println("狗狗睡觉......"); } } public class Test{ public static void main(String args[]) { Animal animal = new Dog(); animal.shout(); animal.sleep(); Dog dog = animal; dog.sleep(); Animal animal2 = new Animal(); dog = (Dog)animal2; dog.shout(); } }

4.运行下列程序

class Person { private String name ; private int age ; public Person(String name,int age){ this.name = name ; this.age = age ; } } public class Test{ public static void main(String args[]){ Person per = new Person("张三",20) ; System.out.println(per); System.out.println(per.toString()) ; } }

(1)程序的运行结果如下,说明什么问题?

Person@166afb3 Person@166afb3

调用toString()和不调用,输出的结果相同。

(2)那么,程序的运行结果到底是什么呢?利用eclipse打开println(per)方法的源码,查看该方法中又调用了哪些方法,能否解释本例的运行结果? 源码:

public void println(Object x) { String s = String.valueOf(x); synchronized (this) { print(s); newLine(); } }

(3)在Person类中增加如下方法

public String toString(){ return "姓名:" + this.name + ",年龄:" + this.age ; }

重新运行程序,程序的执行结果是什么?说明什么问题? 结果为:

姓名:张三,年龄:20 姓名:张三,年龄:20

在类中覆写了toString()方法后,直接输出对象则调用的是覆写后的方法。

(二)实验总结

1.定义员工类,具有姓名、年龄、性别属性,并具有构造方法和显示数据方法。定义管理层类,继承员工类,有自己的属性职务和年薪。定义职员类,继承员工类,并有自己的属性所属部门和月薪。定义一个测试类,进行测试。画出类图。

2.按照下面要求完成类的设计

(1)设计一个平面图形抽象类(提供求该类对象周长和面积的方法)和一个立体图形抽象类(提供求该类对象表面积和体积的方法) (2)设计球类、圆柱类,圆锥类、矩形类、三角形类、圆类,分别继承平面图形抽象类和立体图形抽象类。 (3)建立测试类,进行测试。画出类图。

(三)代码托管

https://git.oschina.net/hebau_cs15/java-cs01fs.git

转载于:https://www.cnblogs.com/fsaixuexi/p/6727820.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)