Java - 关于子类父类的向上转型,向下转型
以下Animal为父类,Dog,Cat作为子类,分别继承Animal
class Animal{
public void shout(){
System.out.println("叫了一声");
}
}
class Dog extends Animal{
public void shout() {
System.out.println("旺旺旺");
}
public void seeDoor() {
System.out.println("看门中");
}
}
class Cat extends Animal{
public void shout() {
System.out.println("喵喵喵");
}
}
总结:
1. Dog对象转成Animal对象可行,如d2
Cat对象转成Animal对象可行,如c2
2. d2作为Animal对象转成Dog对象可行。如d3,且可执行一个Dog特有的方法
3. c2作为Animal对象转成Dog对象,编译通过,运行报错,显示 java.lang.ClassCastException,类型转化出错
实例代码:
1. Dog对象转成Animal对象可行,如d2
Cat对象转成Animal对象可行,如c2
public class TestPoym{
public static void main(String[] args) {
Dog d1 = new Dog();
animalCry(d1);
Animal d2 = new Dog(); //向上转型
animalCry(d2);
Animal c1 = new Cat();
animalCry(c1);
Animal c2 = new Cat();
animalCry(c2);
}
static void animalCry(Animal a) {
a.shout();
}
}
结果:

2. d2作为Animal对象转成Dog对象可行。如d3,且可实现一个Dog特有的方法,看门
public class TestPoym{
public static void main(String[] args) {
Dog d1 = new Dog();
animalCry(d1);
Animal d2 = new Dog(); //向上转型
animalCry(d2);
Animal c1 = new Cat();
animalCry(c1);
Animal c2 = new Cat();
animalCry(c2);
Dog d3 = (Dog)d2; //向下转型
d3.seeDoor();
}
static void animalCry(Animal a) {
a.shout();
}
}
结果:

3. c2作为Animal对象转成Dog对象,编译通过,运行报错,显示 java.lang.ClassCastException,类型转化出错
代码:
public class TestPoym{
public static void main(String[] args) {
Dog d1 = new Dog();
animalCry(d1);
Animal d2 = new Dog(); //向上转型
animalCry(d2);
Animal c1 = new Cat();
animalCry(c1);
Animal c2 = new Cat();
animalCry(c2);
Dog d3 = (Dog)d2; //向下转型
d3.setDoor();
Dog c3 = (Dog)c2; //编译通过,运行出错,显示强制转换出错
}
static void animalCry(Animal a) {
a.shout();
}
}
结果:

Java - 关于子类父类的向上转型,向下转型的更多相关文章
- java 向上,向下转型
在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转 ...
- java基础(十)之向上转型/向下转型
向上转型:将子类的对象赋值给父类的引用. 向下转型:将父类的对象赋值给子类的引用. 向上转型 Student a = new Student(); Person zhang = a; 或者 Perso ...
- “全栈2019”Java第九十章:内部类可以向上或向下转型吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- java上转型和下转型(对象的多态性)
/*上转型和下转型(对象的多态性) *上转型:是子类对象由父类引用,格式:parent p=new son *也就是说,想要上转型的前提必须是有继承关系的两个类. *在调用方法的时候,上转型对象只能调 ...
- Java面向对象作业-用接口方式测试向下转型
Java面向对象作业-用接口方式测试向下转型 根据视频的里实例 我们直接修改Test2测试方法: package com.java1234.chap03.sec13; public class Tes ...
- java 向上转型 向下转型
//父类 四边形 class Quadrangle{ public static void draw (Quadrangle q){ } } //子类 public class Parallelog ...
- (转载)java多态(2)-------Java转型(向上或向下转型)
5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念“人”.再例如,麻雀是鸟类的一种(鸟类的子类), ...
- Java面向对象之多态(向上、向下转型) 入门实例
一.基础概念 多态: 重点是对象的多态性.某一事物的多种体现形态. 多态的作用: 1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行. 2.不能使用子类特有的功能.只能使用覆盖父类的功能. ...
- 1.12(java学习笔记)多态及向上、向下转型
一.多态 多态是指同一个方法被调用,由于对象不同导致行为不同. 例如调用自由活动方法,张三喜欢玩耍,那么他就会去玩耍. 李四喜欢学习,那么他可能去学习.调用方法因对象的不同 而产生了不同的行为. 形成 ...
随机推荐
- 【Windows】ASP.NET Core 部署到 IIS
如果你的系统环境没有 .NET CORE SDK,请到官网进行下载: https://www.microsoft.com/net/download/windows 接下来我们开始进行环境的部署,首先在 ...
- Word 2010发布博客文章(修正)
目前大部分的博客作者在写博客这件事情上都会遇到以下3个痛点:1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.2.发布到博客或公众号平台 ...
- 洛谷P4172 [WC2006]水管局长(lct求动态最小生成树)
SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一条从A至B的水管的路径, ...
- <a>标签的用法以及[@text_cut]
<a href="${a.url}" target="_blank">[@text_cut s=a.title len=titLen append= ...
- cxgrid的ImageComboBox属性学习
1.点击Items设置右边有三个点按钮 2.Images属性绑定imagelist控件 3.点击Items即可选择显示的图片和文字 4.设置CxlookupcomboBox的高度 AutoSize设置 ...
- Linq限定操作之All,Any,Contains源码分析
Linq限定操作之All,Any,Contains源码分析 linq的限定操作 常见的限定操作: All,Any,Contains 一:All 1. 解释: 确定序列中的所有元素是否满足条件. 从字面 ...
- Oracle SQl优化总结
对数据库技术的热爱是我唯一的安慰,毕竟这是自己喜欢的事情,还可以做下去. 因为客户项目的需要,我又开始接触Oracle,大部分工作在工作流的优化和业务数据的排查上.为了更好的做这份工作,我有参考过or ...
- java(一)IntelliJ和eclipse环境下的Hello World
1. IntelliJ环境下的Hello World 1. 启动IntelliJ IDE,选择File->New->Project 选择Java如果没有出现Project SDK,则选择N ...
- C# 汉语生成拼音(微软官方方案)
项目开发中用户的登录名是管理员在后台输入汉字姓名后自动生成的拼音.例如输入:张三,则登录名自动生成ZHANGSAN. 我在网上查阅了很多方法: 如:http://blog.csdn.net/nengz ...
- Eclipse无法正常创建android工程解决方法!
我最近升级了安卓的SDK,升级后发现无法在Eclipse中创建android工程了,创建的工程完毕后,没有自动生成这个工程的activity和对应的布局文件,上网搜索一番,最后终于解决了.可能是升级后 ...