《疯狂Java讲义》4
目录
类的继承
1.继承的特点:
2.重写父类的方法(override,也称为方法覆盖):
3.super
Polymorphism
类的继承
1.继承的特点:
(1) java的继承具有单继承的特点,每个子类只有一个直接父类。
(2) 父类也称为超类、基类。用extends作为继承的关键字。
(3)注意:Java的子类不能获得父类的构造器。
2.重写父类的方法(override,也称为方法覆盖):
遵循“两同两小一大”原则:“两同”:方法名相同,形参列表相同;“两小”:子类方法返回值类型比父类方法返回值类型更小或者相等、子类方法声明抛出的异常类比父类方法声明抛出的异常类更小或者相等;“一大”:子类方法的访问权限比父类方法的访问权限更大或者相等。
举个栗子:
结果如下:
上次我们说道过,方法重载只需要方法名一样,修饰类型可以不同,但在这里要注意一点:如果父类的方法是static修饰的(类方法),子类的方法也应该是static修饰的(类方法)。当子类覆盖了父类方法之后,子类的对象将永远不能访问父类中被覆盖的方法,但是可以调用父类中被覆盖的方法(用super或者父类类名作为调用者)。
举个栗子:
结果如下:
还要注意一点:如果父类中的方法是用的private进行修饰的,那么即使子类和父类方法、修饰类型等等完全相同,也不是对父类方法的重写,相当于自己冲洗定义了一个方法,只不过巧了,父类中也有这个方法。
3.super
上面实际上已经说了super的用法。这里提一点,super调用的是实例的方法或者变量而不是类方法或者变量。如果想调用类方法或类变量,应该使用父类类名作为调用者。
多态
Polymorphism
1. Java引用变量有两个类型,一个是编译类型,一个是运行时类型。编译时类型由声明该变量时使用的类型来决定,运行时类型由实际赋给该变量的对象来决定,如果编译时类型和运行时类型不一致,就可能出现所谓的多态。
我们通过栗子来进一步了解:
在第47行加了注释以后输出的结果如下:
如果加上这行注释,会报错:
下面解释一下上面的代码:
首先要知道什么事编译时类型和运行时类型,其实顾名思义即可,给个例子更好理解:
(1)在main()方法中显示的创建了三个引用变量,对于前两个引用变量bs和sc,因为编译时变量和运行时变量相同,所以调用它们的成员变量和方法都是正常的。
(2)第三个引用变量较为特殊,如上图,编译时类型为BaseClass,运行时类型是SubClass,在调用test方法时,由于子类重写过父类的了,所以用的还是子类的,但是变量(book)还是父类的,而下面的sub方法,因为在父类中没有,所以会报错,这就是说,引用变量只能调用它的编译时变量,不能调用运行时变量。这里要注意,实例变量不具有多态性,按照编译时状态走;方法具有多态性。
2. 下面说个好玩的东西:instanceof运算符
上面我们说道,引用变量只能调用它的编译时变量,不能调用运行时变量,可是如果想让程序调用运行时变量怎么办?——强制转换,那这里就遇到问题了,我们都知道强制转换怎么个转换方法,当然也清楚,强制转换可能会有问题:
(1)基本类型之间的转换只能在数值之间进行,但是数值类型与布尔类型之间不能进行转换;
(2)引用类型之间的转换是在有继承关系的两个类型之间。
考虑到进行强制类型转换时可能出现异常,因此进行类型转换之前应该先通过instanceof运算符进行判断,看是否可以成功转换。
instanceof
instanceof 运算符的前一个操作数通常是一个引用型变量,后面通常是一个类。它用于判断前面的对象是否是后面的类的子类或者实例。如果是,返回true,否则,返回false。
在使用instanceof 运算符时注意,运算符前面的编译类型与后面的类要么相同,要么具有继承关系,否则会编译错误。
举个栗子说instanceof的用法:
结果如下:
END
【2017.07.17】好了,今天Java就学到这里吧,第五章完了,准备第六章,迫不及待想玩后面的界面。昨天没有弄竞赛题,今天不能拖了,加油吧!早上上课,专注了3个小时,收获颇丰,老师讲的每一句都带上了自己的思考,还是很喜欢这样的感觉的,小学期的任务主要是做CPU和状态机,不知道自己行不行,just try it!话说回来,这个其实离不开之前备考时对计组理的认真思考与体会,果然一分耕耘一份收获,看来知识还是学通透了好啊。放假了,但是对我而言,没有假期!!!FIGHTING!!!
《疯狂Java讲义》4相关推荐
- 【转】《从入门到精通云服务器》第六讲—OpenStack基础
前五期的<从入门到精通云服务器>受到了广泛好评,收到留言,有很多读者对云计算相关的技术非常感兴趣.应观众要求,我们这期要安利一条纯技术内容.准备好瓜子.花生,随小编一起进入OpenStac ...
- 《从入门到精通云服务器》-4
上周咱们深入分析了云服务器的配置问题,好了,现在手上有了云服务器之后,我们又不得不提它:DDOS攻击.这是所有运维者的心头痛,也是任何公司听闻后都将心惊胆战的强大对手.下面我们将用浅显易懂的方式讲述什 ...
- ReactJs入门教程-精华版
原文地址:https://www.cnblogs.com/Leo_wl/p/4489197.html 阅读目录 ReactJs入门教程-精华版 回到目录 ReactJs入门教程-精华版 现在最热门的前 ...
- 从入门到精(fang)通(qi)第5期 我们的征途是星辰大海
生物信息分析:从入门到精(fang)通(qi)第5期 我们的征途是星辰大海 GeneDock聚道科技 为生命计算,助看病不难! 已关注 19 人赞同了该文章 生信小白:震惊!一个全基因组会产生数百万个 ...
- python做excel自动化视频教程-从零基础入门到精通用Python处理Excel数据视频教程...
从零基础入门到精通用Python处理Excel数据视频教程 1.从零基础开始用python处理Excel数据 1-1 什么是python.mp4 1-2 为什么要学习用Python处理Excel表格. ...
- 小学生c语言入门ppt,C语言入门至精完整版46759.ppt
C语言入门至精完整版46759 第10章 指针 C语言程序设计 第十章 指针 地址和指针的概念 变量的指针和指向变量的指针变量 数组与指针 字符串与指针 指向函数的指针 返回指针值的函数 指针数组和指 ...
- 视频教程-19全新mysql教程零基础入门实战精讲mysql视频DBA数据库视频教程SQL教程-MySQL
19全新mysql教程零基础入门实战精讲mysql视频DBA数据库视频教程SQL教程 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有node/ja ...
- Unity_Shader,作用流程入门程精讲
Unity_Shader 作用流程入门程精讲 Unity_Shader 渲染流水线 什么是渲染流水线 渲染流水线的各大阶段 应用阶段_程序与数据的读入 几何阶段_顶点着色器 光栅化阶段_片元着色器 简 ...
- python从入门到精通书-100G Python从入门到精通全套资料!
Python 究竟有多火?目前在编程语言排行榜中,Python当之无愧的成为了第一!Python已经逐渐成为所有IT技术的首选语言.几乎所有IT领域都将Python作为首选编程语言. Python崇尚 ...
- python从入门到精通书-Python从入门到精通(资源汇总)
1.入门阶段 [The Python Tutorial* 零基础入门学习Python ** 网易云课堂,老师诙谐幽默,上手快 2.拔高阶段 最好自己动手写一些项目,一定要使用GitHub 3.方向进阶 ...
最新文章
- SQL Server中的锁的简单学习
- 记一次WiFi芯片W600上的一个浮点运算
- java方法重载和重载方法_Java 8的方法参考进一步限制了重载
- hutool的定时任务不支持依赖注入怎么办_设计一个任务调度算法,时间轮算法,比优先队列更高效...
- 数字农业WMS库存操作重构及思考
- mysql 分页优化策略(一)
- Helm 3 完整教程(十八):Helm 流控制结构(2)with 语句
- nacos动态配置数据源_Spring Cloud 系列之 Alibaba Nacos 配置中心
- html文本框设置大小,css怎么设置文本框大小
- 服务器自动更新不能关闭,Windows2008服务器如何关闭系统自动更新?
- 论文解读:Prediction of Protein–Protein Interaction Sites Using Convolutional Neural Network
- zblog导航小智收录网导航模板
- 小心! Java三目运算符
- torch.randn用法
- 易基因|m5C RNA甲基化测序技术---从mRNA到全转录组(mRNA+lncRNA+tRNA)m5C单碱基分辨检测|技术解读
- Ayla CEO大卫.弗里德曼:你应该了解的五种物联网大数据!
- 第三次作业:卷积神经网络基础
- matlab treeplot,matlab creats phylogenetic tree
- SoundPlayer 播放无声音解决方案
- js 获取汉字首字母和汉字转拼音