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++ 多态详解及常见面试题
今天,讲一讲多态: 多态就是不同对象对同一行为会有不同的状态.(举例 : 学生和成人都去买票时,学生会打折,成人不会) 实现多态有两个条件: 一是虚函数重写,重写就是用来设置不同状态的 二是对象调 ...
随机推荐
- 使用Kali的wifite和aircrack-ng联合破解wifi密码
准备材料 有kali的虚拟机,这里推荐VM 一个超级便宜的USB无线网卡,很便宜三十几块钱 一个靠谱的WPA密码字典(关于字典文件,我这里整理了好多,可联系我.QQ:1213456261) 1.运行k ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(19)-Fiddler精选插件扩展安装,将你的Fiddler武装到牙齿
1.简介 Fiddler本身的功能其实也已经很强大了,但是Fiddler官方还有很多其他扩展插件功能,可以更好地辅助Fiddler去帮助用户去开发.测试和管理项目上的任务.Fiddler已有的功能已经 ...
- python中使用数组作为索引
链接:https://blog.csdn.net/yzlh2009/article/details/114118470 情况一,索引数组为整数值 情况二,索引数组为bool值
- 使用port-forward访问集群中的应用程序,以Redis 为例
为Redis创建Deployment和Service 创建 Redis Deployment,YAML文件如下: apiVersion: apps/v1 kind: Deployment metada ...
- Kafka Eagle 3.0.1功能预览
1.概述 最近有同学留言,关于Kafka Eagle的一些使用问题.今天笔者就为大家来详细介绍Kafka Eagle 3.0.1的功能以及使用方法. 2.内容 在3.0.1版本中,EFAK优化了分布式 ...
- Javascript 手写 LRU 算法
LRU 是 Least Recently Used 的缩写,即最近最少使用.作为一种经典的缓存策略,它的基本思想是长期不被使用的数据,在未来被用到的几率也不大,所以当新的数据进来时我们可以优先把这些数 ...
- 学习ASP.NET Core Blazor编程系列五——列表页面
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- cifar-10-dataset
import cv2 import numpy as np import os import pickle data_dir = os.path.join("data", &quo ...
- 洛谷P6033 [NOIP2004 提高组] 合并果子 加强版 (单调队列)
数据加强了,原来nlogn的复杂度就不行了...... 首先对原来的n个数排序(注意不能用快排),因为值域是1e5,所以可以开桶排序,开两个队列,一个存原来的n个数(已经满足单增),另一队列存两两合并 ...
- 洛谷P4513 小白逛公园 (线段树)
这道题看起来像是线段树和最大子段和的结合,但这里求最大子段和不用dp,充分利用线段树递归的优势来处理.个人理解:线段树相当于把求整个区间的最大子段和的问题不断划分为很多个小问题,容易解决小问题,然后递 ...