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.面向对象的特征有哪些方面 ①抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节 ...
随机推荐
- robotframework测试用例加入注释
*** Variables ***${HOST} 192.168.132.135${USER} username*** Test Cases ***Simple [Documentation] Sim ...
- 【BZOJ3236】【AHOI2013】作业 线段树 分治 树状数组
题目描述 给你一个长度为\(n\)的数列,还有\(m\)个询问,对于每个询问\((l,r,a,b)\),输出1.区间\([l,r]\)有多少范围在\([a,b]\)的数:2.区间\([l,r]\)有多 ...
- windows 服务器同步互联网时间
@echo off ::netsh ipsec static set policy name=7road assign=n net time /setsntp:pool.ntp.org net sto ...
- 生产者&消费者.py
1.最简单的 --生产者消费者 send.py# !/usr/bin/env python3.5# -*- coding:utf-8 -*-# __author__ == 'LuoTianShuai' ...
- 【php】php分隔字符串为数组
工作中会经常分隔字符串为数组,我们可以用php内置函数str_split(),可是有时候字符串中包含中文,切割后会乱码,比如 print_r(str_split('dw氛围fesf',3)); 输出 ...
- centos7使用yum安装zabbix3.4
应用环境: 关于ZABBIX: zabbix一开强大的开源监控工具,同类型还有nagios,ganglia,cacti等监控工具,通过过去一年Google趋势就知道zabbix全球的相对热度: ...
- javascript之判断专题
javascript有数组,对象,函数,字符串,布尔,还有Symbol,set,map,weakset,weakmap. 判断这些东西也是有很多坑,像原生的typeof,instanceOf有一些bu ...
- linux复制文件到一个不存在的文件夹
复制文件到一个不存在的文件夹时,会报错 cp -f aaa /home/admin/.m2/cp: 无法创建普通文件"/home/admin/.m2/": 是一个目录 解决的方式: ...
- HDU3032 Nim or not Nim?
解:使用sg函数打表发现规律,然后暴力异或起来即可. #include <bits/stdc++.h> typedef long long LL; ; int a[N]; inline L ...
- github在网页编写readme之后的操作
study from : https://jingyan.baidu.com/article/f3e34a12a25bc8f5ea65354a.html
