Javase中多态polymorphic的简单介绍
-------------多态-----------------
(1)面向对象三大核心思想;
1、封装 2、继承 3、多态
(2)多态定义:父类的引用指向子类的对象。
(3)引用指的是父类声明的一个引用型变量,变量有: 1、成员变量
2、静态变量
3、构造方法的变量
4、普通方法的变量
5、声明就用的变量
(4)变量的声明一般来说需要三步:声明数据类型 声明变量名 赋值
但是严格来讲为两步:声明数据类型 声明变量名
(5)赋值有两种情况:1、父类型声明,赋值一个父类型的引用值
父类型声明,赋值一个子类型的引用值
2、多态
(6)里氏替换原则:能使用父类的地方,一定可以使用子类
(7)多态的概念:
编译阶段,将父类的属性,生成属性列表,编译时绑定
运行阶段,将子类生成一个对象,子类也有自身属性列表,运行时绑定
程序运行时,通过父类的属性去调用子类对象的属性(特指成员方法)
(8)具体调用:运行阶段
1、遍历父类的属性列表
2、遍历子类的属性列表
3、如果子类有相同,就调用子类的,没有就调用父类的
4、如果父类没有所指属性,直接报错,子类中不用去
public class Poly01{
public static void main(String[] args){
Big a = new Big();
a.eat();//输出父类
Big b = new Small();
b.eat();//输出子类
//b.happy();//报错:找不到符号
b.cry();//输出父类
}
}
class Big{
public void eat(){
System.out.println( "大的吃小的" );
}
public void cry(){
System.out.println( "大的在哭" );
}
}
class Small extends Big{
public void eat(){
System.out.println( "小的不让大的吃" );
}
public void happy(){
System.out.println( "小的很高兴" );
}
}
class Tiny extends Big{
public void eat(){
System.out.println( "很小的" );
}
}
多态发生的前提:有继承关系的两个类中(或说体系) 多态有两种类型:1、向上转型,这是从数据类型角度,把子类对象当成父类来处理,可看作自动类型转换
2、向下转型,强制类型转换
自动类型转换:1、基本数据类型中,低精度向高精度
2、引用数据类型中,子类向父类
强制类型转换:1、基本数据类型中,高精度向低精度
2、引用数据类型中,子类向父类
public class Poly02{
public static void main(String[] args){
//---------向上转型----------
Big a1 = new Small();
a1.eat();//输出子类
//a1.happy();//找不到符号
//向上转型的缺点:对丢失子类对象中特有的属性
//---------向下转型----------
//向下转型是基于某个类的对象向上转型后,才可向下转型
Small a2 = (Small) a1;
a2.happy();//输出子类
a2.cry();//调用父类
a2.eat();//输出子类
//---------instanceof--------
//运算符:判断当前对象是不是某个类实例化而来的
Big a3 = new Tiny();
a3.eat();
//Small b2 = (Small) a3;
//b2.happy();//编译通过,但是java.lang.ClassCastException错误
if (a3 instanceof Small){
Small b2 = (Small)a3;
}
System.out.println(a3 instanceof Small );
//为了避免java.lang.ClassCastException错误,java引入了instanceof运算符
//instanceof运算符,其运算结果是boolean;
// if( 引用 instanceof 类型名)-->true/false
}
}
以上就是我的理解.欢迎大家指导!
Javase中多态polymorphic的简单介绍的更多相关文章
- 浏览器中 F12 功能的简单介绍
chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...
- [转]chrome浏览器中 F12 功能的简单介绍
本文转自:https://www.cnblogs.com/zhuzhubaoya/p/9758648.html chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己 ...
- 【F12】chrome浏览器中 F12 功能的简单介绍
chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...
- chrome浏览器中 F12 功能的简单介绍
chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...
- 个人对Java中多态的一些简单理解
什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...
- Java中多态的一些简单理解
什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...
- Java Web中web.xml文件简单介绍
参考博客: https://www.cnblogs.com/Y-oung/p/8401549.html 1.XML 声明和根元素 <?xml version="1.0" en ...
- 关于如何在其他包中写controller和简单介绍@SpringBootApplication
本文参考博客:https://blog.csdn.net/u013473691/article/details/52353923 关于@Configuration和@Bean参考博客:https:// ...
- 标准C++中的STL容器类简单介绍
SGI -- Silicon Graphics[Computer System] Inc.硅图[计算机系统]公司. STL -- Standard Template Library 标准模板库. ...
随机推荐
- QT学习(对话框)codeblock版本
参考: http://www.cnblogs.com/JohnShao/archive/2011/09/26/2191627.html http://www.cnblogs.com/xiao-chen ...
- 我的第一个项目:用kinect录视频库
kinect深度视频去噪 kinectmod32.dll http://pan.baidu.com/s/1DsGqX 下载后改名kinect.dll 替换掉Redist\OpenNI2\Drivers ...
- iOS开发——View的透明属性hidden、alpha、opaque
Hidden.Alpha.Opaque的区别 在iOS中,每个View都有Hidden.Alpha.Opaque三个关于透明的属性,官方文档介绍如下: 1. @property(nonatomic) ...
- HDU 4195 Regular Convex Polygon
思路:三角形的圆心角可以整除(2*pi)/n #include<cstdio> #include<cstring> #include<iostream> #incl ...
- POJ 3468 A Simple Problem with Integers 线段树 区间更新
#include<iostream> #include<string> #include<algorithm> #include<cstdlib> #i ...
- Centos添加硬盘分区、挂载磁盘
默认一个硬盘,新增硬盘识别为sdb.sdbc一次类推 1.查看磁盘信息 >fdisk -l #新磁盘为/dev/sdb,截图是已经分区完成了. 2.进入分区界面 >fdisk /dev/s ...
- Oracle ABP(Autotask Background Process)
ABP相当于自动任务与调度程序之间的中介,其主要作用是将自动任务转换成Autotask作业,供调度程序执行.同样重要的是,ABP还维护所有任务执行的历史记录.ABP将其专用资料档案库存储在sysaux ...
- 【JAVA - SSM】之MyBatis查询缓存
为了减轻数据压力,提高数据库的性能,我们往往会需要使用缓存.MyBatis为我们提供了一级缓存和二级缓存. (1)一级缓存是SqlSession级别的缓存,在操作数据库的时候需要创建一个SqlSess ...
- 在Java中如何用String类中的indexof方法得到一个词的出现频率
public class Test{ public static void main(String[] args) { String s="hello jack hello look me ...
- JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...