JAVA多态学习2
好啦,这里紧接着上次没说的向下转型,请读者结合上次讨论的向上转型的样例一起探讨(事实上本次代码也有加上,放心)。
我们这里希望从向下转型会出现的两种基本情况进行探讨
package downcasting;
//动物类Animal父类
class Animal{
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//动物会叫
public void cry(){
System.out.println("不知道怎么叫");
}
//动物吃东西
public void eat(){
System.out.println("不知道吃什么");
}
}
//创建Dog子类并extends继承Animal父类及覆盖cry方法
class Dog extends Animal{
//狗叫
public void cry(){ //覆盖父类方法
System.out.println("汪汪叫");
}
//狗吃东西
public void eat(){ //覆盖父类方法
System.out.println("狗爱吃骨头");
}
public void bite(){
System.out.println("狗会咬人...");
}
}
public class Downcasting {
public static void main(String[] args) {
// TODO 自己主动生成的方法存根
Animal g1=new Dog(); //向上转型
g1.cry();
g1.eat();
/*
* 情况一:假设父类引用的对象假设引用的是指向的子类对象,
* 那么在向下转型的过程中是安全的。也就是编译执行是不会出错误的
*/
Dog dog=(Dog)g1; //向下转型,编译和执行皆不会出错
dog.cry();
dog.eat();
Animal g2=new Animal();
/*
*情况二:假设父类引用的对象是父类本身,那么在向下转型的过程中是不安全的。
*编译不会出错,可是执行时会出现java.lang.ClassCastException错误。
*它能够使用instanceof来避免出错此类错误。
* */
/*
*错误例如以下: Exception in thread "main" java.lang.ClassCastException:
* downchange.Animal cannot be cast to downchange.Dog
at downchange.Downchange.main(Downchange.java:62)
Dog dog1=(Dog)g2;
dog1.cry();
dog1.eat();
*/
if(g2 instanceof Dog){
Dog dog1=(Dog)g2;
dog1.cry();
dog1.eat();
}
else if(g2 instanceof Animal){
System.out.println("g2是Animal的实例");}
//Dog g3=new Animal(); //不存在从Animal转换到Dog
}
}
ps:
instanceof:
1.用instanceof来測试它所指向的对象是否是某个类。
2.instanceof在对象类型的强制转换,先推断是否是某种类型,是的话再强制转换成改类型。
JAVA多态学习2的更多相关文章
- JAVA多态学习3
这一节我们来学习抽象类 抽象类–深入讨论 抽象类是java中一个比較重要的类. 1.用abstract关键字来修饰一个类时.这个类就是抽象类. 2.用abstract关键字来修饰一个方法时,这种方法就 ...
- JAVA多态学习1
多态–概念 所谓多态.就是指一个引用(类型)在不同情况下的多种状态. 也能够理解成:多态是指通过指向父类的指针,来调用在不同子类中实现的方法. 实现多态有两种方式:1.继承.2.接口 这一次我们先来演 ...
- Java多态学习笔记
面向对象三大特性:封装,继承和多态.其中,封装,继承都比较通俗易懂,唯有多态令我甚是头疼.经过仔细研究之后,终于搞懂了一点,特来做一个分享.独乐乐不如众乐乐. 何为多态?多态的本质是:一个程序中同名的 ...
- [转帖]java基础学习总结——多态(动态绑定)
https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态
- Java学习笔记二十六:Java多态中的引用类型转换
Java多态中的引用类型转换 引用类型转换: 1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换: 2.向下类型转换(强制类型转换),是大类型到小类型的转换: 3.instanceof运算 ...
- Java 多态——与C++的比较
学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- java JDK8 学习笔记——助教学习博客汇总
java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...
- Java多态总结
面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 1.定义: 多态:指允许不同类的对象对同一消息做出响应.即同一消息可 ...
随机推荐
- spark groupByKey 也是可以filter的
>>> v=sc.parallelize(["one", "two", "two", "three", ...
- nyoj--49--开心的小明(背包)
开心的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他 ...
- Most common words
To find the most common words, we can apply the DSU pattern; most_common takes a histogram and retur ...
- java连接操作Oracle
package com.sp.test; import java.sql.*; import java.util.*; public class Text_lianxi extends Thread ...
- FragmentPagerAdapter和FragmentStatePagerAdapter的区别
FragmentPagerAdapter 1:简单的介绍: 该类内的每一个生成的 Fragment 都将保存在内存之中,因此适用于那些相对静态的页,数量也比较少的那种:如果需要处理有很多页,并且数据动 ...
- JavaScript 获取移动设备的型号
https://joyqi.com/javascript/how-to-detect-mobile-devices-model-using-javascript.html?utm_source=too ...
- fill,fill-n,memset的区别
这里在网上搜集归纳了一个总结 memset函数 按照字节填充某字符 在头文件<string.h>中 因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为 ...
- Open With Atom添加到右键菜单/从右键菜单移除
1.进入Settings 快捷键ctrl+shift+p,输入settings后回车 2.切换到System选项卡 3.通过勾选/取消勾选以下选项实现添加/移除右键菜单 √ Show in file ...
- 关于FAT32分区的U盘4GB文件的测试
关于FAT32分区的U盘4GB文件的测试 很多人都知道FAT32的分区,单文件大小不能超过4GB,关于这个问题就来测测看. FAT32最大文件大小为2的32次方,也就是4294967296 Byte, ...
- python之禅---对象与元类
众所周知,python是一门面向对象的编程语言,python中一切皆对象,那么我们先探讨一下什么是对象. 一.对象 在生活中一个事物就是一个对象,比如:一只猫就是一个对象,猫的体型.猫毛的颜色等是它的 ...