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.面向对象的特征有哪些方面 ①抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节 ...
随机推荐
- P1578 奶牛浴场
P1578 奶牛浴场 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每头奶牛都必 ...
- java JUC
https://www.cnblogs.com/q151860/p/8589683.html
- win10系统同时安装python2.7和python3.6
我是先在本机上安装的python3.6.5,因为要学习一个框架,但是这个框架只支持python2,所以我又安装了python2.7.15,并且配置到系统环境变量 环境变量配置了python3.6.5的 ...
- 使用ROME解析rss,如何获取icon图标
问题 网站使用SpringMVC框架,实现了RSS订阅,但是在阅读器里面,只有网站的标题,没有网站的图标. 分析 ROME会从<channel>标签下指定的<link>地址中, ...
- 【原创】【状态压缩DP】POJ3254 Corn Fields【新手向】
一开始根本不会状压dp,上网各种找题解,但发现他们写的都很......反正我作为一个没有接触过状态压缩的,根本看不懂! 然后看了好多状态压缩的题的题解,总结了一下思路,思路很重要,有了思路转换成计算机 ...
- 洛谷 P5020 【货币系统】
谁说这一定要排序的,这就是个装满背包嘛 \({f[i]}\) 表示 \(i\) 面值最多能被几张钱表示 则若其不能被表示 \(f[i]=-inf\) 能表示且只有它自己则 \(f[i]=1\) 初始化 ...
- [NOI2010]海拔(最小割)
题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作一个 正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个 ...
- java 数组声明定义 数组内存分配 数组初始化 数组引用 数组的遍历
一,数组的定义 Java 中定义数组的语法有两种: 1. type arrayName[]; 2. type[] arrayName;type 为Java中的任意数据类型,包括基本类型和组合类型,ar ...
- 解题:HAOI2018 苹果树
题面 统计贡献,每个大小为i的子树贡献就是$i(n-i)$,然后子树里又有$i!$种:同时这个子树的根不确定,再枚举这个根是$r$个放的,又有了$r!$种.子树内选点的方式因为子树的根被钦定了顺序所以 ...
- HDU3032 Nim or not Nim?
解:使用sg函数打表发现规律,然后暴力异或起来即可. #include <bits/stdc++.h> typedef long long LL; ; int a[N]; inline L ...
