JAVA核心技术I---JAVA基础知识(多态)
一:类转型
类转型:子类可以转父类,父类不可以转子类(除非父类对象本身就是子类)
1.父类
public class Human { public void say() {
System.out.println("Hello World");
} public void eat() {
System.out.println("eat food");
}
}
2.子类
public class Men extends Human{
public void plough() {
System.out.println("Men is ploughing");
} public void eat() {
System.out.println("Men is eating");
}
}
3.实现转型
public class HumanTest {
public static void main(String args[]) {
Men m=new Men();
m.eat();
//子类转父类
Human hm=m;
hm.eat();
hm.say();
//hm.plough();//The method plough() is undefined for the type Human
//父类转子类(前提该父类是子类转过去的)
Men m2=(Men)hm;
m2.eat();
m2.plough();
}
}
Men is eating
Men is eating
Hello World
Men is eating
Men is ploughing
4.问题:编译时报错和运行时报错
class Pencil {
public void write (String content){
System.out.println( "Write",+content);
}
} class RubberPencil extends Pencil{
public void write (String content){
System.out.println("Rubber Write"+content);
} public void erase (String content){
System.out.println( "Erase "+content);
}
}
执行下列代码的结果是哪项?
Pencil p=new Pencil();
(( RubberPencil) p).write("Hello");
C.运行时抛出异常 D.编译失败
强制转换是允许的,不过相当于会产生内存越界,导致运行时报错
二:多态
多态:子类转型为父类后,调用普通方法,依旧是子类的
1.父类
public class Human { public void say() {
System.out.println("Hello World");
} public void eat() {
System.out.println("eat food");
}
}
2.子类:对父类方法重写
public class Women extends Human{
public void weave() {
System.out.println("women is weaving");
} public void say() {
System.out.println("Hello World,I am a women");
} public void eat() {
System.out.println("Women eat food");
}
}
public class Men extends Human{
public void plough() {
System.out.println("Men is ploughing");
} public void eat() {
System.out.println("Men is eating");
} public void say() {
System.out.println("Hello World,I am a man");
}
}
public class Child extends Human{
public void eat() {
System.out.println("Child is eating");
} public void say() {
System.out.println("Hello World,I am a Child");
}
}
3.多态实现
public class HumanTest {
public static void main(String args[]) {
Human[] HM= new Human[];
HM[]=new Men();
HM[]=new Women();
HM[]=new Child();
for(int i=;i<;i++) {
HM[i].eat();
HM[i].say();
}
}
}
Men is eating
Hello World,I am a man
Women eat food
Hello World,I am a women
Child is eating
Hello World,I am a Child
三:利用多态实现解耦
(一)父类实现解耦
public class HumanTest {
public static void main(String args[]) {
HumanSay(new Men());
HumanSay(new Women());
HumanSay(new Child());
HumanSay(new Child() {
public void say() {
System.out.println("Someone is eating");
}
});
} public static void HumanSay(Human a) { //方法不是依赖某个具体子类,可以使用父类,抽象类,甚至接口来实现解耦
a.say();
} public static void HumanEat(Human a) {
a.eat();
}
}
Hello World,I am a man
Hello World,I am a women
Hello World,I am a Child
Someone is eating
(二)接口实现:
1.接口
public interface Human {
public void say();
public void eat();
}
2.子类
public class Men implements Human{
public void plough() {
System.out.println("Men is ploughing");
} public void eat() {
System.out.println("Men is eating");
} public void say() {
System.out.println("Hello World,I am a man");
}
}
public class Women implements Human{ public class Child implements Human{
3.其他一样,结果相同
(三)抽象类实现
1.抽象类
public abstract class Human {
public abstract void say();
public void eat() {
System.out.println("Human is eating");
}
}
2.子类
public class Men extends Human{
public class Women extends Human{
public class Child extends Human{
3.调用方式一样,结果一样
JAVA核心技术I---JAVA基础知识(多态)的更多相关文章
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- Java核心技术 卷1 基础知识-第一天
基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...
- Java学习之旅基础知识篇:面向对象之封装、继承及多态
Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...
- [Java面试三]JavaWeb基础知识总结.
1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...
- Java中浮点数的基础知识
偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- java 程序运行的基础知识【Java bytecode】
聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...
- Java Script 学习笔记 -- 基础知识
Java script 概述 java Script 的简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为 ...
- Java学习1——计算机基础知识
本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.
- JAVA面试题相关基础知识
1.面向对象的特征有哪些方面 ①抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节 ...
随机推荐
- BZOJ2658 ZJOI2012 小蓝的好友(treap)
显然转化为求不包含关键点的矩形个数.考虑暴力,枚举矩形下边界,求出该行每个位置对应的最低障碍点高度,对其建笛卡尔树,答案即为Σhi*(slson+1)*(srson+1),即考虑跨过该位置的矩形个数. ...
- 反射 与 preprrty装饰器
反射: 指的是通过字符串来操作对象属性的增删改除 主要分为四种方法: hasattr : 查看字符串 是否 存在 返回---> Ture / False getattr: 获取对象属 ...
- flask项目第一次如何运行创建数据库
- 给 Haproxy 创建日志文件
背景介绍:默认下的Haproxy配置是不会生成日志文件的,而无运行日志,无法确定系统运行是否流畅,无法提起预判可能发生的故障 创建Haproxy日志文件的步骤如下vi /etc/rsyslog.con ...
- BSGS算法及扩展
BSGS算法 \(Baby Step Giant Step\)算法,即大步小步算法,缩写为\(BSGS\) 拔山盖世算法 它是用来解决这样一类问题 \(y^x = z (mod\ p)\),给定\(y ...
- Dividing the Path POJ - 2373(单调队列优化dp)
给出一个n长度的区间,然后有一些小区间只能被喷水一次,其他区间可以喷水多次,然后问你要把这个区间覆盖起来最小需要多少喷头,喷头的半径是[a, b]. 对于每个只能覆盖一次的区间,我们可以把他中间的部分 ...
- 如何在以太坊上搭建一个Dapp?
原创: 前哨小兵甲 区块链前哨 昨天 策划|Tina作者|Mahesh Murthy俗话说,实践出真知!对于开发人员来说,最好的学习办法就是亲自动手做一个小项目.所以,接下来我们将会以一个投票程序为例 ...
- 用foobar进行码率转换 适用与sacd-r转成低码率
之前下载了不少高清音频,有黑胶转录的也有母带文件.这些高清音频大都是24bit,采样率96khz或者88.2khz或者更高.而我想将部分精品专辑刻录成cd.首先我需要将这些文件转换为16bit,44. ...
- 测试利器 Postman
一.安装 官网:https://www.getpostman.com/ Postman是一个Chrome的一个插件工具,我们可以通过Chrome的应用商店进行进行搜索并安装,安装完成会在桌面上显示一个 ...
- Tomcat如何发布web项目
tomcat/webapps目录是用来存放Java项目的.每一个文件夹都是一个项目,默认这个目录下已经有了四个项目,都是tomcat自带的. 其中ROOT就是我们测试Tomcat时访问的Tomcat的 ...