Java中的多态,引用类型的转换
1.多态分为引用多态和方法多态,见测试类
package com.wangcf;
//父类
public class Animal {
public void eat(){
System.out.println("父类的方法");
}
}
package com.wangcf;
//子类
public class Bridge extends Animal{ public void eat(){
System.out.println("子类鸟重写的方法");
} public void fly(){
System.out.println("子类鸟独有的可以飞的方法父类中没有");
}
}
package com.wangcf;
//子类
public class Tiger extends Animal{ }
package com.wangcf;
//测试类
public class Test {
public static void main(String[] args) {
//1.引用多态
Animal obj1=new Animal(); //父类的引用可以指向本类的对象
Animal obj2=new Bridge(); //父类的引用可以指向子类的对象
Animal obj3=new Tiger();
Tiger obj4=new Tiger();
//Bridg obj3=new Animal(); 子类引用不可以指向父类 //2.方法多态 优先使用子类的方法,若子类没有重写,则使用父类的方法;父类引用不可以调用子类独有的方法
obj1.eat(); //创建父类的本类对象,调用方法时,调用的是本类的方法
obj2.eat(); //若父类指向子类对象,调用方法为子类的重写方法
obj3.eat(); //或者继承方法
obj4.eat(); //若创建子类的本类对象,没有重写父类的方法,则会调用父类的方法
//obj2.fly(); 不能通过父类的引用调用子类独有的方法 }
}
2.引用类型的转换
(1)向上转型,小类型转换为大类型,它是隐式的,自动的,不存在隐患
(2)向下转型,大类型转换为小类型,它是强制转换,存在隐患,会参数内存溢出;可以使用instanceof运算符类避免安全性问题
package com.wangcf;
//测试类
public class Test {
public static void main(String[] args) {
Bridge bri=new Bridge();
Animal animal=bri;//向上转型 //Bridge bri2=animal;向下转型,错误需要使用强制转换
Bridge bri1=(Bridge)animal;//强制 //Tiger tig=(Tiger)animal;//虽然编译器没有报错,运行时会错,我们知道animal是Briger转换来的,它不能转换为Tiger
//Tiger tiger=(Tiger)bri; //Cannot cast from Bridge to Tiger
//使用 instanceof 进行判断
if(animal instanceof Tiger){
Tiger tig1=(Tiger)animal;
}else{
System.out.println("无法进行类型转换");
}
}
}
Java中的多态,引用类型的转换的更多相关文章
- java中实现多态的机制是什么?
多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次 ...
- 13、java中的多态
1,多态的体现 父类的引用指向了自己的子类对象. 父类的引用也可以接收自己的子类对象.2,多态的前提 必须是类与类之间有关系.要么继承,要么实现. 通常还有一个前提:存在覆盖. 3,多态的好处 多态的 ...
- 深度分析:理解Java中的多态机制,一篇直接帮你掌握!
Java中的多态 1 多态是什么 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.用白话来说,就是多个对象调用同一 ...
- Java中数据类型及其之间的转换
Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种:1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits).2 ...
- java中四种引用类型
java中四种引用类型 今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在 ...
- Java中数据类型及其之间的转换(转)
Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种:1)int长度数据类型有:byte(8bits).short(16bits).int(32bits).long(64bits).2 ...
- java中四种引用类型(对象的强、软、弱和虚引用)
对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2 ...
- 关于==和equals()方法&Java中string与char如何转换&String,StringBuffer
1.对于基本数据类型,可以直接使用==和!=进行内容比较 如:int x=30; int y=30; x==y; //true 基本数据类型 简单类型(基本类型) bo ...
- Java 中的多态,一次讲个够之接口实现关系中的多态
上文还没有写完,这一篇继续 Java 中的多态,一次讲个够之继承关系中的多态 https://www.cnblogs.com/qianjinyan/p/10824576.html 接口实现关系,和继承 ...
- 通过实例聊聊Java中的多态
Java中的多态允许父类指针指向子类实例.如:Father obj=new Child(); 那么不禁要发问?? 使用这个父类型的指针访问类的属性或方法时,如果父类和子类都有这个名称的属性或方法,哪 ...
随机推荐
- BZOJ 2654: tree(二分 最小生成树)
Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 2901 Solved: 1196[Submit][Status][Discuss] Descript ...
- 【Linux】管理文件系统
文件系统概念: 文件系统是指文件的组织与管理结构,是一个有关于磁盘中各种有用信息的记录——即是保存以下信息的结构记录表 当前所使用磁盘的容量信息 磁盘的可用信息,包括已占用和剩余的空间: 文件与目录的 ...
- Django学习笔记6(iframe、外键插入)
1.{%include 'index.html'%i} 平时很好用的iframe在django里面的不是很好用 django里面提供了{%include 'index.html'%i}的方式来取代了i ...
- debian系统,启动Wireshark,出现Couldn't run /usr/bin/dumpcap in child process:权限不够
这是由于当前用户没有权限运行/usr/bin/dumpcap造成的./usr/bin/dumpcap是Wireshark的包捕获引擎. 先用ls命令看一下dumpcap的权限情况:xy@debian- ...
- Zeta--S3 Linux抓取一帧YUV图像后使用硬件编码器编码成H.264
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <getopt.h&g ...
- html表单相关标签及属性
1.<form>标签 定义整体的表单区域 action属性 定义表单数据提交地址 method属性 定义表单提交的方式,一般有“get”方式和“post”方式 2.<label> ...
- leetcode记录-字符串转整数
实现 atoi,将字符串转为整数. 该函数首先根据需要丢弃任意多的空格字符,直到找到第一个非空格字符为止.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字 ...
- SAP SM13 V2更新队列批量执行
SE38输入程序名RSM13005 Function Module 输入MCEX_UPDATE_03 Client 输入800 其他默认 执行
- 20155227 2016-2017-2 《Java程序设计》第三周学习总结
20155227 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 类与对象 使用Java撰写程序几乎都在使用对象,要产生对象必须先定义类,类是对象的设计图,对 ...
- day 6 返回值,参数
1.函数返回值 In [3]: def divid(a,b): ...: shang = a//b ...: yushu = a%b ...: return shang,yushu ...: In [ ...