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.定义: 多态:指允许不同类的对象对同一消息做出响应.即同一消息可 ...
随机推荐
- SSL 延迟与 Http、Https
SSL延迟有多大? 1. 基本概念 ssl 协议由网景公司(Netscape)设计,由此网络链接从 http 逐步走向更为安全的 https 加密链接模式. HTTPs 链接和 HTTP 链接都建立在 ...
- 洛谷P1137 旅行计划 解题报告(拓扑排序+DP)
我看了一下其他大佬的题解,大部分都是拓扑排序加上DP.那么我想有的人是不明白为什么这么做的,拓扑排序有什么性质使得可以DP呢?下面我就提一下. 对一个有向无环图(Directed Acyclic Gr ...
- 32.智能指针auto_ptr
#include <iostream> #include <memory> #include <string> #include <vector> us ...
- 一键解决 500、502和504 Internal Privoxy Error 问题(图文详解)
最近获得一个SS帐号,手机,其他电脑都能上,但是在我的电脑上就是500 或 502 或 504,如下所示. 502 Read from server failed: Unknown error Th ...
- links[v1]
justep core java Spring Boot ui5 template spring Cross-origin resource sharing 统一异常处理 数据库连接池的选择 Drui ...
- Vuejs componet
Vuejs componet <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...
- 976 B. Lara Croft and the New Game
You might have heard about the next game in Lara Croft series coming out this year. You also might h ...
- BZOJ 3639: Query on a tree VII LCT_set维护子树信息
用 set 维护子树信息,细节较多. Code: #include <cstring> #include <cstdio> #include <algorithm> ...
- 旧机器安装ArchLinux的各种问题
昨天突然想到家里还有一台很早之前不用的计算机 于是打算安装一个linux,开学再拿到宿舍用来写代码,怎么说台式机显示屏也比笔记本的大 机器安装问题 屏幕机箱擦干净,该连的东西都连上,然后插电源,本以为 ...
- [USACO15JAN]草鉴定Grass Cownoisseur(分层图+tarjan)
[USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of his cows ...