第五章 继承与多态
一、小结
本章主要讲解了Java语言面向对象的特性,包括继承简介、子类的继承、多态、抽象类、final修饰符、内部类。通过本章的学习,读者应该熟练掌握Java语言中继承和多态的操作;重点理解super关键字和final修饰符。另外,需要掌握抽象类和抽象方法的规则,通过程序更好理解抽象类的使用。
二、测验
抽象方法只有函数声明,没有函数体。
super关键字:子类和父类成员变量或成员方法同名时调用
三、习题
1、 创建如下类:Circle类(圆形)、Square类(正方形)和Point类(点)。Point根据(x,y)坐标定位。Circle除了一个(x,y)坐标点之外,还有半径属性。正方形除了一个(x,y)坐标点之外,还有边长。请问:这些类中哪些是超类,哪些是子类?
Java中的超类就是父类
Point类是超类,Circle类和Square类是子类。
2、关键字组合问题。
(1)abstract方法能否是final类型的? 不行
abstract修饰的类需要被子类继承,abstract修饰的方法需要子类重写,但是final修饰的类不能被继承,final修饰的方法也不能被子类重写。
(2)abstract方法能否是static类型的? 不行
因为静态方法是属于类的,所以静态方法必须满足给类调用,如果通过类无法调用,那么这种静态方法肯定是不对的。为了达到这一要求,static方法就必须有方法体,即已经实现了,也就不是抽象方法了。
另:抽象方法也不能被private修饰:因为abstract修饰的方法必须通过子类重写才有效,而private修饰的方法对子类不可见,即父类中如果存在private abstract void out();而子类中有private void out(){},则它们是两个不同的方法,子类中的out方法不是对父类的重写,而是属于子类独有的方法。
(3)能否定义一个私有静态(private static)方法? 不行
private:在学习继承的过程中,我们知道,如果在父类中修饰了一个private的方法,子类继承之后,对子类也是不可见的。子类重写则在编译阶段就会报错。
static:Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法类的任何实例都不相关,所以概念上不适用。
5-3 简单说明方法重载与方法覆盖的区别。
方法的重载是指在一个类中,出现多个方法名相同,但参数个数或参数类型不同的方法。方法覆盖体现了子类补充或者改变父类方法的能力,通过覆盖,可以使一个方法在不同的子类中表现出不同的行为。
5-4 列举出面向对象的三大特性。
封装、继承、多态
原文地址:https://www.cnblogs.com/amazingj/p/15003890.html
- Hibernate_day04总结
- Hibernate_day03总结
- 服务器进程异常的原因分析(第二篇)(r8笔记第16天)
- 最近处理的几个小问题_20160311 (r8笔记第35天)
- Hibernate_day02总结
- Hibernate_day01总结
- ADG备库批量查询失败的原因分析(r8笔记第33天)
- 通过外部表改进一个繁琐的大查询 (r8笔记第32天)
- 一个简单的bigfile tablespace无法扩展的案例处理 (r8笔记第31天)
- 测试环境的迁移式升级和数据整合(r8笔记第27天)
- 增量数据丢失的原因分析(r8笔记第26天)
- Java全栈开发Spring学习第三天
- 一个oracle bug的简单验证(r8笔记第45天)
- 批量导出csv文件的基本尝试(r8笔记第44天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 国标GB28181协议客户端EasyGBS国标视频平台级联EasyNVR:EasyNVR到EasyGBS上是如何注册及注销的?
- git全局忽略文件配置
- 2018-10-16近期vue开发总结
- 有赞埋点实践
- 树莓派配置LEDE(openwrt衍生版)拨号
- Android 沉浸式解析和轮子使用
- 腾讯云CDN使用(接入方式:COS源)
- 工作流引擎在有赞 DevOps 中的实践
- 微信带备注群发真好玩!
- 微信机器人-定时群发+智能回复
- 治电EggJS开发规范
- jenkins远程部署项目
- puppeteer爬取house365租房数据
- 视频上云网关平台EasyNTS组网硬件设备连接断线无法重连,该如何解决?
- JS深拷贝