Day22:多态详解
方法的多态
1.1什么是多态?
指一个对象在不同时刻拥有不同的形态。
例:猫 cat=new 猫();
动物 animal=new 猫();
多态建立的条件:
- 建立在继承的关系上;
- 有方法重写;
- 有父类的引用指向子类对象(父类引用指向即 动物 animal)
我们通过代码进一步了解多态:
将多态建立的条件加入代码之中
//建立一个父类
public class Animals{
//创建父类方法
public void eat(){
System.out.println("动物在吃东西");
}
}
//建立一个子类
public class Cat extends Animals{//建立继承关系
//方法重写
public void eat(){
System.out.println("猫在吃鱼");
}
}
//建立一个测试类
public class Aplication{
public static void main(String[] args){
//建立父类的引用指向子类对象
Animals a=new Cat();
}
}
以上根据多态的三个前提条件我们建立了多态。
1.2多态中的成员访问特点
多态中的成员访问特点:
成员属性:编译和运行都看左边;
成员方法:编译看左边,运行看右边。
我们通过以下代码对特点进一步的了解:
//建立一个父类
public class Animals{
int age=40;
public void eat(){
System.out.println("动物在吃东西");
}
public void play(){
Sysem,out,println("动物在玩游戏");
}
}
//建立一个子类
public class Cat extends Animals{//建立继承关系
String name="花儿";
int age=5;
public void eat(){
System.out.println("猫在吃鱼");
}
public void shout(){
System.out.println("猫在叫");
}
}
//建立一个测试类
public class Aplication{
public static void main(String[] args){
Animals a=new Cat();
//分别调用成员并输出
Sytem.out.println(a.age);
Sytem.out.println(a.name);
Sytem.out.println(a.eat);
Sytem.out.println(a.play);
Sytem.out.println(a.shout);
}
}
//输出结果
40
ClassCastException
猫在吃鱼
动物在玩游戏
ClassCastException
我们来对结果进行分析:
父类中的成员属性有age;子类的成员属性有name、age
我们建立的对象引用是父类的;但对象的实际本质是子类对象
这也就将对象实例化分为了左右,而外界看到的则是左侧的引用类型
所以当我们调用属性、方法时,最开始编译就从左边开始,然后运行右边
引用类型为父类,其成员含有age、eat、play;当我们调用age、eat、play时,我们是能够成功调用的;而调用name(非父类成员)时发现报错
由此我们可以得出第一个结论:
多态现象中,我们可以调用什么成员是由左边的引用类型决定的!
我们从结果发现a.age的结果是父类的属性
由此我们得到第二个结论:
多态现象中,属性的编译和运行都是由左边的引用类型决定的!
我们从输出结果发现我们调用eat方法时,输出的结果却是子类eat方法(重写)的结果;而调用play(未重写)方法时,输出的是父类的play方法;而调用shout方法则无法调用
由此我们可以得出第三个结论:
多态现象中,方法的编译是看左边,运行是看右边!
总结以上结论:
成员属性:编译和运行都看左边;
成员方法:编译看左边,运行看右边。
Day22:多态详解的更多相关文章
- “全栈2019”Java第五十四章:多态详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- day22作业详解
1.面向对象作业1 2.作业详解 点击查看详细内容 #1. class Li(object): def func1(self): print('in func1') obj = Li() obj.fu ...
- Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案
多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...
- 18.Java 封装详解/多态详解/类对象转型详解
封装概述 简述 封装是面向对象的三大特征之一. 封装优点 提高代码的安全性. 提高代码的复用性. "高内聚":封装细节,便于修改内部代码,提高可维护性. "低耦合&quo ...
- C++多态详解
多态是面向对象的程序设计的关键技术.多态:调用同一个函数名,可以根据需要但实现不同的功能.多态体现在两个方面,我们以前学过的编译时的多态性(函数重载)和现在我们这一章将要学习的运行时的多态性(虚函数) ...
- 【转】java多态详解
1. Java中除了static和final方法外,其他所有的方法都是运行时绑定的.private方法都被隐式指定为final的,因此final的方法不会在运行时绑定.当在派生类中重写基 ...
- [置顶] JAVA从零单排4-----继承、封装和多态详解
继承 Java三大特征之一:继承.Java的继承具有单继承的特点,每个子类只能有一个直接父类. 继承的特点 Java的继承用extends关键字来实现,被继承的类成为父类,实现继承的类被称为子类.子类 ...
- java之多态详解
前言 什么叫多态?多态就是一种事物可以有多种表现形式 多态三要素 1.被动方必须有继承关系 2.子类一般都要重写父类方法 3.必须将主动方的功能函数的参数设置为 被动方父类的类型 举个例子司机开车 假 ...
- c# 中的封装、继承、多态详解
面向对象有封装.继承.多态这三个特性,面向对象编程按照现实世界的特点来管理复杂的事物,把它们抽象为对象,具有自己的状态和行为,通过对消息的反应来完成任务.这种编程方法提供了非常强大的多样性,大大增加了 ...
- C++ 多态详解及常见面试题
今天,讲一讲多态: 多态就是不同对象对同一行为会有不同的状态.(举例 : 学生和成人都去买票时,学生会打折,成人不会) 实现多态有两个条件: 一是虚函数重写,重写就是用来设置不同状态的 二是对象调 ...
随机推荐
- 【Java面试】面试遇到宽泛的问题,这么回答就稳了,谈谈你对Redis的理解
"谈谈你对Redis的理解"! 面试的时候遇到这类比较宽泛的问题,是不是很抓狂? 是不是不知道从何开始说起? 没关系,今天我用3分钟教你怎么回答. 大家好,我是Mic,一个工作了1 ...
- 基于HBuilderX+UniApp+ThorUI的手机端前端的页面组件化开发经验
现在的很多程序应用,基本上都是需要多端覆盖,因此基于一个Web API的后端接口,来构建多端应用,如微信.H5.APP.WInForm.BS的Web管理端等都是常见的应用.本篇随笔继续分析总结一下项目 ...
- int和String的相互转化
int和String的相互转化 将int转化为String 通过valueof( )方法进行转化 int a=100;String num1=String.valueOf(a); Sys ...
- MinIO存储桶通知指南
官方文档地址:http://docs.minio.org.cn/docs/master/minio-bucket-notification-guide 存储桶(Bucket)如果发生改变,比如上传对象 ...
- 面试突击86:SpringBoot 事务不回滚?怎么解决?
在 Spring Boot 中,造成事务不自动回滚的场景有很多,比如以下这些: 非 public 修饰的方法中的事务不自动回滚: 当 @Transactional 遇上 try/catch 事务不自动 ...
- 关于AWS-EC2或者多个资源的tag的批量添加-基于Resource Groups & Tag Editor 和 命令处理
今天收到一个请求,需要对公司所有的ec2-添加上两个成本IO标签,因为机器太多了 想到了如下两种方案去批量处理 方案一:利用aws的 [Management Tools]下的 Resource Gro ...
- 在Tomcat中启用虚拟线程特性
前提 趁着国庆前后阅读了虚拟线程相关的源码,写了一篇<虚拟线程 - VirtualThread源码透视>,里面介绍了虚拟线程的实现原理和使用示例.需要准备做一下前期准备: 安装OpenJD ...
- FluentValidation 验证(一):WebApi 中使用 基本使用
FluentValidation.AspNetCore 引入包 public class Login2RequestValidator : AbstractValidator<Login2Req ...
- hmtl5 web SQL 和indexDB
前端缓存有cookie,localStorage,sessionStorage,webSQL,indexDB: cookie:有缺点 localStorage:功能单一 sessionStorage: ...
- Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2020-02-06'; nested exception is java.lang.IllegalArgumentException]解决
今天做springbook项目前端输入日期传到数据库保存报了一下错误 Whitelabel Error Page This application has no explicit mapping fo ...