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学习笔记)多态及向上、向下转型
一.多态 多态是指同一个方法被调用,由于对象不同导致行为不同. 例如调用自由活动方法,张三喜欢玩耍,那么他就会去玩耍. 李四喜欢学习,那么他可能去学习.调用方法因对象的不同 而产生了不同的行为. 形成 ...
随机推荐
- C# JSON使用过程中开发的小工具
我在用JSON的过程中,经常要去看一下JSON的结构,而JSON串大不部分时候都是未格式化的数据,一次我不得不用一些网页上的在线解析和格式化工具来进行格式化查看,但是这些网页有时候并不好用:因此就结合 ...
- SIP协议整理
本文记录开发.实现IMS项目时,整理的SIP协议基础知识:若有侵权,请告之. SIP协议 1. SIP协议简介 SIP是一个应用层的控制协议,可以用来建立.修改.和终止多媒体会话(或者会议) ...
- freemarker基本入门教程
copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主 ...
- MFC 错误异常,用vs添加资源并为资源定义类后报错:error C2065 : 未声明的标识符
添加了一个Dialog资源,修改了ID之后右击资源添加了一个类,在类里面有一个成员变量: // 对话框数据 enum { IDD = IDD_GETIN }; 而在编译过程中出现报错,错误代号是 ...
- getpost请求
// GET请求与获取结果 /// </summary> public static string HttpGet(string Url, string postDataStr) { Ht ...
- C# 连接 IBM MQ
安装 IBM WebSphere MQ:http://www-01.ibm.com/software/integration/wmq/explorer/downloads/ 正确安装要注意几个地方,集 ...
- C#多线程学习(四) 多线程的自动管理(线程池)
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPo ...
- Spring Cloud使用总结
本文来自网易云社区,转载务必请注明出处. Spring Cloud 是spring团队推出的基于SpringBoot的分布式微服务框架,为开发者提供了在分布式系统(如配置管理.服务发现.断路器.智能路 ...
- Adorner 装饰器
装饰器 Adorner 装饰器是WPF中较为常用的技术之一,也是不同于XAML的技术. 较为特殊. 特殊于装饰器全部由C#构成,不同于ControlTenmpate和Style的元素. 装饰器在某些方 ...
- django 配置xadmin
django xadmin本地安装 百度云 下载,激活码:bxhv,下载后不需要解压,直接本地 pip install xxx.zip django 版本需要 1.1.11, 1,添加app INST ...