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

(一)学习总结

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

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

不能够编译通过,使用super关键字调用父类的构造方法需要将语句supe("Hello.Grandparent.");放在第一句。

构造函数是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。构造函数的功能主要用于在类的对象创建时定义初始化的状态,构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。

子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。

不能反过来调用,因为父类不知道子类有什么变量而且子类也得不到初始化的父类变量。

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(); //创建对象,向上转型。父类中没有sleep方法,所以不能够被调用。 Dog dog =(Dog)animal; //向下转型,应强制类型转换 dog.sleep();
Animal animal2 = new Dog();
dog = (Dog)animal2; //父类与子类没有建立联系,父类不能向子类转换 dog.shout();
}
}

4.运行下列程序

程序修改:

class Person {
private String name ;
private int age ;
public Person(){ }
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "姓名"+getName()+" 年龄"+getAge();
}
}
public class Test{
public static void main(String args[]){
Person per = new Person("张三",20) ; System.out.println(per);
System.out.println(per.toString()) ;
}
}

(1)对象输出时一定会调用Object类中的toString()方法打印内容。java所有类都有一个公共的父类Object,toString方法是Object中的常用方法,子类中不覆写toStrong方法时,调用toString程序会随机给出地址信息

(2)程序中覆写了toString方法,输出对象信息时调用的是子类中覆写的toString方法

5.其他需要总结的内容。

(1)多态:对象的向上转型:转型之后,操作的为父类对象,则无法找到子类中定义的新方法 对象的向下转型:如果想要产生一个对象向下转型则必须产生向上转型关系,表示子类与父类关系的建立

(2)抽象类:抽象类必须有子类,不能使用final关键字声明,可以有构造方法

(3)继承:子类无条件继承父类的无参构造方法 子类可通过super关键字调用父类的构造方法

(4)final关键字:final关键字不能有子类 final声明的方法不能被子类继承 使用final声明的方法不能被子类覆写,使用final声明的变量即为常量,需为其指定内容,static final联合声明的为全局常量

(二)实验总结

1.

程序设计思路:

(1)定义员工类,具有姓名、年龄、性别属性,构建构造方法和get,set方法。

(2)定义管理层类,继承员工类,写出子类属性职务和年薪,使用super关键字继承父类属性。

(3)定义职员类,继承员工类,写出子类属性所属部门和月薪,使用super关键字继承父类属性。

(4)定义一个测试类,进行测试

类图:

2.

程序设计思路:

(1)构建一个平面图形抽象类,写出Zhou1,Mian1方法用来求周长和面积。构建一个立体图形抽象类,写出Zhou2,Mian2方法用来求表面积和体积。

(2)构建球类、圆柱类,圆锥类继承立体图形抽象类,覆写父类中的zhou1,Mian1方法。构建矩形类、三角形类、圆类继承平面图形抽象类,覆写父类中的zhou2,Mian2方法。

(3)建立测试类,进行测试

类图:

3.

程序设计思路:

(1)构造狮子类,猴子类,鸽子类,喂养类

(2)在喂养类中构建狮子,猴子,鸽子的对象,并调用eat()方法。

(3)写出测试类,进行测试

程序设计思路:

(1)构建抽象类Animal

(2)构建狮子类,猴子类,鸽子类继承父类Animal类,覆写父类中eat()方法。

(3)在喂养类中创建Animal的对象an,调用eat()方法。

(4)创建测试类,创建子类向上转型父类,调用父类中eat()方法。

程序设计思路:

(1)构建抽象类Animal

(2)构建狮子类,猴子类,鸽子类继承父类Animal类,覆写父类中eat()方法。

(3)在喂养类中创建Animal的对象数组animal[],调用eat()方法。

(4)创建测试类,在对象数组中添加对象并输出。

(三)代码托管

作业链接

Java第四次作业—面向对象高级特性(继承和多态)的更多相关文章

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

    Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...

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

    一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握类的继承概念和设计 掌握构造方法的继承原则 掌握方法重写 掌握super键字和final关键字 理解多态的概念,掌握通过方法重写和方法重载机制 ...

  3. Java第五次作业--面向对象高级特性(抽象类与接口)

    Java第五次作业--面向对象高级特性(抽象类与接口) (一)学习总结 1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结. 2.汽车租赁公司,出租汽车 ...

  4. Java第五次作业--面向对象高级特性(抽象类和接口)

    一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握抽象类的设计 掌握接口的设计 理解简单工厂设计模式 理解抽象类和接口的区别 掌握包装类的应用 掌握对象的比较方法和比较器的使用 学习使用日期操 ...

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

    Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...

  6. Java第三次作业——面向对象基础(封装)

    Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...

  7. [.net 面向对象编程基础] (12) 面向对象三大特性——继承

    [.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...

  8. Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。

    Python3 与 C# 面向对象之-继承与多态   文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...

  9. C#基础总结之八面向对象知识点总结-继承与多态-接口

    .方法深入讲解(返回值,形参与实参) 方法 public int getName(int i,int j) { int sum = i + j; return sum; } .利用泛型存储对象数据 . ...

随机推荐

  1. codeforces 557D Vitaly and Cycle

    题意简述 给定一个图 求至少添加多少条边使得它存在奇环 并求出添加的方案数 (注意不考虑自环) ---------------------------------------------------- ...

  2. Laex/Delphi-OpenCV

    https://github.com/Laex/Delphi-OpenCV 66 Star119 Fork75 Laex/Delphi-OpenCV CodeIssues 3Pull requests ...

  3. vue项目中实现手势密码

    思路: 本来应该全部都用canvas来实现的,但时间紧迫 写的时候只想着圆圈用li写,线用canvas,写到一半才想通,还好这一通下来比较顺利 第一步:页面中的9个点用v-for循环出来li,ul设置 ...

  4. MySQL开启SSL认证,以及简单优化

    1.1 MySQL开启SSL认证 #生成一个 CA 私钥 [root@db01 ssl]# openssl genrsa 2048 > ca-key.pem Generating RSA pri ...

  5. 使用vue配合组件--转载

    1.由饿了么 UED (知乎专栏)设计的桌面端组件库已经开源,文档:Element,仓库: GitHub - ElemeFE/element: Desktop UI elements for Vue. ...

  6. Linux GNU GAS introduction

    Linux汇编语法简介(GNU GAS)     声明:本教程不是介绍汇编语言和CPU指令的书籍,只是对gas的用法做一简单介绍.市面上所有讲汇编的书都是在微软的环境下,使用的是Intel的语法格式, ...

  7. hdu1158 Employment Planning(dp)

    题目传送门 Employment Planning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  8. 使用 lombok 简化代码

    使用前的准备 1.Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注解实现这一目的.  <1>添加 ...

  9. elasticsearch api约定

    elasticsearch REST API 使用JSON通过HTTP协议传输. 本约定贯穿整个REST API,除非有特别的说明. 一.多重索引 大多数APIs引用到一个index参数来在多个索引中 ...

  10. shell使用lftp同步yum仓库