Java第四次作业—面向对象高级特性(继承和多态)
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第四次作业—面向对象高级特性(继承和多态)的更多相关文章
- Java第四次作业——面向对象高级特性(继承和多态)
Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...
- Java第四次作业--面向对象高级特性(继承和多态)
一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握类的继承概念和设计 掌握构造方法的继承原则 掌握方法重写 掌握super键字和final关键字 理解多态的概念,掌握通过方法重写和方法重载机制 ...
- Java第五次作业--面向对象高级特性(抽象类与接口)
Java第五次作业--面向对象高级特性(抽象类与接口) (一)学习总结 1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结. 2.汽车租赁公司,出租汽车 ...
- Java第五次作业--面向对象高级特性(抽象类和接口)
一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握抽象类的设计 掌握接口的设计 理解简单工厂设计模式 理解抽象类和接口的区别 掌握包装类的应用 掌握对象的比较方法和比较器的使用 学习使用日期操 ...
- Java第四次作业,面向对象高级特性(继承和多态)
Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...
- Java第三次作业——面向对象基础(封装)
Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...
- [.net 面向对象编程基础] (12) 面向对象三大特性——继承
[.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...
- 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.单继 ...
- C#基础总结之八面向对象知识点总结-继承与多态-接口
.方法深入讲解(返回值,形参与实参) 方法 public int getName(int i,int j) { int sum = i + j; return sum; } .利用泛型存储对象数据 . ...
随机推荐
- VS2010提示error TRK0002: Failed to execute command
转自VC错误:http://www.vcerror.com/?p=277 问题描述: windows8自动更新Microsoft .NET Framework 3.5和4.5.1安全更新程序,今天用V ...
- Hive date_add 和 date_diff 函数
date_add 函数 例子:date_add('day',-1,current_date) date_diff 函数 例子:date_diff('day',cast(a.dt1 as timesta ...
- java并发编程笔记(六)——AQS
java并发编程笔记(六)--AQS 使用了Node实现FIFO(first in first out)队列,可以用于构建锁或者其他同步装置的基础框架 利用了一个int类型表示状态 使用方法是继承 子 ...
- CATiledLayer显示超大图片的解决方案
先对图片进行了裁剪 -> 很多小图片, 然后再根据显示 进行绘制 - (void)viewDidLoad { [super viewDidLoad]; [self cutImageAndSave ...
- QTP read or write XML file
'strNodePath = "/soapenv:Envelope/soapenv:Body/getProductsResponse/transaction/queryProducts/qu ...
- (转)SQL注入原理
原文地址:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html SQL Injection:就是通过把SQL命令插入到Web表单递交或 ...
- 原生js事件绑定
一.JS事件 (一)JS事件分类 1.鼠标事件: click/dbclick/mouseover/mouseout 2.HTML事件: onload/onunload/onsubmit/onresiz ...
- fiddler 暂停抓包
或者点击左下角 capturing
- vue 中router.go;router.push和router.replace的区别
vue 中router.go:router.push和router.replace的区别:https://blog.csdn.net/div_ma/article/details/79467165 t ...
- Linux系统中NFS服务配置
文章目录: 一.NFS服务简介 二.NFS服务端配置 三.NFS客户端配置 四. ...