以下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 - 关于子类父类的向上转型,向下转型的更多相关文章

  1. java 向上,向下转型

    在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转 ...

  2. java基础(十)之向上转型/向下转型

    向上转型:将子类的对象赋值给父类的引用. 向下转型:将父类的对象赋值给子类的引用. 向上转型 Student a = new Student(); Person zhang = a; 或者 Perso ...

  3. “全栈2019”Java第九十章:内部类可以向上或向下转型吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. java上转型和下转型(对象的多态性)

    /*上转型和下转型(对象的多态性) *上转型:是子类对象由父类引用,格式:parent p=new son *也就是说,想要上转型的前提必须是有继承关系的两个类. *在调用方法的时候,上转型对象只能调 ...

  5. Java面向对象作业-用接口方式测试向下转型

    Java面向对象作业-用接口方式测试向下转型 根据视频的里实例 我们直接修改Test2测试方法: package com.java1234.chap03.sec13; public class Tes ...

  6. java 向上转型 向下转型

    //父类 四边形 class Quadrangle{ public static void draw (Quadrangle q){ } } //子类  public class Parallelog ...

  7. (转载)java多态(2)-------Java转型(向上或向下转型)

    5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念“人”.再例如,麻雀是鸟类的一种(鸟类的子类), ...

  8. Java面向对象之多态(向上、向下转型) 入门实例

    一.基础概念 多态: 重点是对象的多态性.某一事物的多种体现形态. 多态的作用: 1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行. 2.不能使用子类特有的功能.只能使用覆盖父类的功能. ...

  9. 1.12(java学习笔记)多态及向上、向下转型

    一.多态 多态是指同一个方法被调用,由于对象不同导致行为不同. 例如调用自由活动方法,张三喜欢玩耍,那么他就会去玩耍. 李四喜欢学习,那么他可能去学习.调用方法因对象的不同 而产生了不同的行为. 形成 ...

随机推荐

  1. UVa 12099 The Bookcase (DP)

    题意:有 n 本书,每本书有一个高度和宽度,然后让你制作一个3层的书架,可以放下所有的书,并且要高*宽尽量小. 析:先把所有的书按高度进行排序,然后dp[i][j][k] 表示 前 i 本书,第二 层 ...

  2. iOS设计模式之单例

    单例模式的意思就是这个类只有一个实例,这个类就是单例类.在iOS中有不少都是单例NSNull,NSFileManager ,UIApplication,NSUserDefaults ,UIDevice ...

  3. .net 可选参数和命名参数

    可选参数,可以为方法的参数设置默认值,在调用方法的时候,如果不传递参数,就是执行默认参数. class Program { , string s = "A", DateTime d ...

  4. scvmm2008 错误 2941 0x80072efe

    该错误是由于vmm和主机之间的证书不匹配所导致的. 1. 运行mmc,文件=>添加管理单元=>添加证书=>计算机账户=>本地计算机. 2. 在下图各个目录证书下删除和vmm关联 ...

  5. PXE-cobbler 无人值守装机

    Cobbler  PXE 自动安装系统(CentOS-7.2) 第一步:系统环境准备 1.查看系统版本与内核 2.关闭防火墙 3.关闭selinux 第二步:安装cobbler 与环境相关组件 1.下 ...

  6. docker安装与基本配置

    Docker有很多种安装的选择,我们推荐您在Ubuntu下面安装,因为docker是在Ubuntu下面开发的,安装包测试比较充分,可以保证软件包的可用性.Mac, windows和其他的一些linux ...

  7. 2018-12-20 第一章初识JAVA-上机

    JAVA初体验之课后练习 一.请写出Java 程序执行过程与编译原理 答:①执行过程:创建.java文件——编译器(JDK环境里的javac.exe文件编译)——输出.class供计算机接受(只有cl ...

  8. C# Winform下一个热插拔的MIS/MRP/ERP框架15(窗体基类场景1)

    最基础的窗体基类其实是通过应用场景反推的结构. 以下是场景一: 单表应用,普通的数据,比如单位/颜色/特殊字典等使用者少的,无需过多控制的可以使用一个数据表格来管理. 和Excel表格差不多,批量修改 ...

  9. Shell中反引号和$()的区别

    Shell中可以用来实现变量代换的命令有两种,一种是由反引号括起来的一条命令另一种是由$()括起来一条命令,shell先执行这条命令,然后见输出结果立刻代换到当前命令行中. 例如定义一个变量存放dat ...

  10. 闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别

    闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别 函数最常见的形式是具名函数(named function): function foo(){ con ...