(七)类、超类和子类 ——(多态,动态绑定,final类,类型转换,抽象类)
java中所有的继承都是公有继承。
在子类中的构造其内可以初始化超类的公有域,但不能初始化超类的私有域。
因此需要在子类构造前的第一行使用super()语句初始化超类的私有域。
如果超类没有不带参数的构造器,而子类没有显式的调用超类的其他构造器,则会出现编译错误。因为编译器无法调用超类的默认构造器。
多态
A为超类,B为子类。则A的变量既可以引用A类的对象,也可以引用B类的对象。
动态绑定
当调用x.f(param)时,若x为C类的对象。
一:编译器列举C类中所有的名为f的方法和其超类中访问属性为public名为f的方法。
二:根据参数类型查找匹配的参数对应的方法,此时获的需要调用的方法和参数类型
三:如果是private方法,static方法,final方法,则编译器可以确定调用的时具体哪一个,这时称为静态绑定。与此对应的是,调用的方法依赖于调用对象的实际类型,并且在运行时动态绑定。
比如:b.get(),如果b是A类型,则调用A的方法,如果b是B类型,则调用B的方法
四:程序运行时,并且采用动态绑定调用方法时,虚拟机调用与x所引用对象的实际类型最合适的方法。
比如:b.get(),如果B类没有该方法,则去B的超类查找。
注意:如果B类有一个private的get()方法,尽管b.get()不能调用这个私有的get()方法,也不会取超类寻找。这是因为超类中的方法不能被子类的private方法覆盖,所以子类有一个private的get()方法,说明超类一定没有这个方法。
因为Object有一个toString方法,因此任何类内都不能有private的toString()方法。
阻止继承
final修饰的类不能有子类,因而不能有方法被覆盖,所以其方法也都是final的。
final修饰的方法不能被覆盖。
强制类型转换
1. 只能在继承层次内进行类型转换
2. 在将超类转换成子类之前,应该使用instanceof进行检查
抽象类
抽象类不能被实例化。
可以定义一个抽象类变量,它只能引用非抽象子类的对象。
抽象类可以包含抽象方法,具体方法和具体数据,其中抽象方法的实现在子类中。
如果子类实现了全部抽象方法,则子类便不是抽象的了。反之,子类也必须标记为抽象的。
受保护访问
private:仅对本类可见
public:对所有类可见
protected:对本包和子类可见
无:对本包可见
(七)类、超类和子类 ——(多态,动态绑定,final类,类型转换,抽象类)的更多相关文章
- 编写Java程序,创建一个数学工具类,将该类设计为final类,Final 修饰符的使用。
返回本章节 返回作业目录 需求说明: 创建一个数学工具类. 将该类设计为final类. 将该类的构造方法的访问权限定义为私有,以防止外界实例化该类. 在该类定义静态double类型常量π,其值为3.1 ...
- Python类总结-继承-子类和父类,新式类和经典类
子类和父类 class Father(object): #子类在使用super调用父类时,Father后面要加object --新式类 def __init__(self): self.Fname = ...
- Java final类&所有构造方法均为private的类(类型说明符&访问控制符)
1. final是类型说明符,表示关闭继承,即final类不能有子类: 但final类可能可以在类外创建对象(即final类的构造方法可以不是private型): 在同一包中时,可以在任何另外一个类中 ...
- Java不可变类与final类
概念 Java的不可变类是指八个基础类型的包装类和String,他们的数据成员是不可变的.使用加法等操作时,其实是创建了一个新的对象. Java的final类是对类用关键字final进行修饰,说明该类 ...
- Core Java (十一) Java 继承,类,超类和子类
Core Java (十一) Java 继承,类,超类和子类 标签: javaJavaJAVA 2013-01-22 17:08 1274人阅读 评论(0) 收藏 举报 分类: java(58) 读 ...
- 动态绑定、阻止继承,final类和方法
1.编译器查看对象的声明类型和方法名.当调用 x.f(param); 且隐式参数x生命为C类对象.这时候可能有多个名字都叫f,但是参数类型不一样的方法.编译器会一一列举C类中名为f的方法和其超类中访问 ...
- Java核心技术第五章——1.类、超类、子类(2)
继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...
- Java核心技术第五章——1.类、超类、子类(1)
1.定义子类: 关键字extends表明正在构造的新类派生与一个已存在的类.已存在的类称为超类.基类或父类:新类称为子类.派生类或孩子类.超类和子类是Java程序员最常用的两个术语(emmm~~我觉得 ...
- C++ 基类指针,子类指针,多态
基类指针和子类指针之间相互赋值(1)将子类指针赋值给基类指针时,不需要进行强制类型转换,C++编译器将自动进行类型转换.因为子类对象也是一个基类对象. (2)将基类指针赋值给子类指针时,需要进行强制类 ...
随机推荐
- JSON API免费接口 各种提供JSON格式数据返回服务网站的API接口
这里为大家搜集了一些能够返回JSON格式的服务接口.部分需要用JSONP调用. 电商接口 京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuIds=J_商品ID& ...
- Postgresql 入门笔记
引言 最近整理了一些PostgreSQL的 常用命令,仅供参考 1. 入门命令 # 重启数据库 $ service postgresql-9.5 restart # 登陆: $ psql ...
- day2-exercise
# Author: 刘佳赐-Isabelle October 22,2018 """ 1.有变量name = "aleX leNb" 完成如下操作: ...
- python学习笔记:第5天 基本数据类型之字典
目录 字典的介绍 补充 字典的介绍 字典(dict)是python中唯一的一个映射的数据类型,它是以一对一对的键值对的形式组成的一个容器,在python中字典也是可变的,我们也可以在字典中存放各种类型 ...
- vowels_双元音
vowels(美式): 双元音:前长后短.前强后弱,流畅滑动. [e]:两个字母“e”和“I”的结合,单词cake.rain.blame.lack.make.later. [aɪ]:两个字母“a”和“ ...
- Python学习:12.Python字符串格式化
字符串格式化 讲解Python这么久,也没有讲解Python的字符串的格式化,那我们今天就来了解一下python字符串格式化的强大之处. 首先我们先理解一下为什么要有字符串的格式化,就是为了方便字符串 ...
- Div标签使用inline-block有间距
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [HDU6315]Naive Operations(线段树+树状数组)
构造一个序列B[i]=-b[i],建一颗线段树,维护区间max, 每次区间加后再询问该区间最大值,如果为0就在树状数组中对应的值+1(该操作可能进行多次) 答案在树状数组中找 其实只用一颗线段树也是可 ...
- Java设计模式(15)——行为模式之策略模式(Strategy)
一.概述 概念 UML简图 角色 二.实践 我们先将上述的UML图的抽象情况下的代码写出,然后再给出一个具体的例子 策略接口——当然如果有一些公共的行为,应当使用抽象类! /** * 策略接口 * * ...
- uCOS-II中的任务切换-图解多种任务调度时机与问题
[@.1 任务调度时机] 之前的一篇文章分析了具体的uCOS-II中的任务切换机制,是从函数调用的角度上分析的.这次我具体从整个程序运行的时间上来看,分析多种任务调度发生的时机.以下所有图片均可点击放 ...