Java中父类强制转换为子类的可能

之前徒弟问了一个问题, 在Java中, 父类对象到底能不能转换成对应的子类对象?

到底能不能, 今天就来说说这个问题, 先看下面一段代码:

package cn.com.hanbinit.test;
/**
 * 检验父类是否可以强转为子类
 * @author icer
 *
 */
public class ConvertPro extends Father {

    public static void main(String[] args) {
        Father father = new Father();
        Father father1 = new ConvertPro();
        ConvertPro son = new ConvertPro();
        // ConvertPro son1 = (ConvertPro) new Father();
        // son = (ConvertPro)father;
        son = (ConvertPro) father1;
    }
}

/**
 * 父类
 *
 * @author icer
 *
 */
class Father {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

上面代码注释掉的两行是会运行错误的. 根据代码显示,  只有我们的父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象.

子类继承父类的所有(包括属性以及方法), 也就是说子类包含的内容应该是比父类要大的. 如果正常环境下, 把一个父类转换成子类一定会损失精度.  但是如果父类对象本身就是用

子类去new出来的, 就类似于一个本来就是儿子角色的人, 去装了一会儿父亲, 这个角色是可以在未来转换回去的, 但是一个父亲, 永远不可能去装儿子的.

时间: 2024-10-03 13:47:24

Java中父类强制转换为子类的可能的相关文章

Java 中 父类变量访问子类方法 需要使用 类型转换 (instenceof)关键字 /类型判断/

通过数组元素访问方法的时候只能访问在 Animal中定义的方法,对 于 Tiger类和  Fish中定义的方法时却不能调用,例如语句  animal[2].swim();就是不正确的.当 需要访问这些方法时需要用到类型转换,演示程序如下. 1 public class DynamicMethodDemo2{ 2 public static void main(String args[ ]){ 3 Animal [ ]animal=new Animal[3]; 4 animal[0]=new An

java中父类与子类的关系以及使用

java中父类与子类的关系以及使用 在java中规定:一个父类可以有多个子类,但是一个子类只能有一个父类.子类可以通过extends关键字来继承父类.做个比较通俗的比喻,就像一个父亲可以有多个亲孩子,但是一个孩子只能有一个亲生父亲. 1.继承以及重写:子类继承父类是对父类属性和方法的全面继承,同时子类在继承了父类的方法后,可对父类的方法进行重写. public class Son extends Fat{ private int b; private String h1; public void

java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题

1 /* 2 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 3 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 4 */ 5 import static java.lang.System.out; 6 7 public class PersonDemo 8 { 9 public static void main(String[] args) 10 { 11 //*********测试父类与子类之间的循环调用的问

java中父类的静态方法不能被重写

Java中父类的静态方法确实不能被重写的,但是有的人可能去做实验发现在子类中去重写父类static方法时,并没什么问题.这里我来具体解释下. public class Parent { public static void add(){   System.out.println("=========Parent");}} public class Children extends Parent { public static void add(){   System.out.print

慕课网-安卓工程师初养成-2-10 Java中的强制类型转换

来源:http://www.imooc.com/code/1241 相信小伙伴们也发现了,尽管自动类型转换是很方便的,但并不能满足所有的编程需要. 例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢? 显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小.此时就需要通过强制类型转换来实现了. 语法:( 数据类型 ) 数值 运行结果:  可以看到,通过强制类型转换将 75.8 赋值给 int 型变量后,结果为 75,数值上并未进行四舍

Java中金额数字转换为大写数字

注:该代码来自于别人,我引入进来并修改了里面的几个bug.现在写进我的博客里,以便于日后查看,和为其它博友们提供方便 修改bug地方:1.金额为0时,不加整.以前是零元整,现在是零元    2.修改"分", "角", "元","万", "亿","兆"位不会出现零 package com.zbx.bs.common.util;import java.math.BigDecimal; /**

Java 中变量初始化、子类和父类构造器调用的顺序

先说结论 变量初始化 -> 父类构造器 -> 子类构造器 贴代码 Animcal.java 父类 public class Animal { private static int index = 0; private static String getStaticName() { String name = String.format("animal %d" , index++); System.out.println(name); return name; } priva

java中字段继承问题--子类不能继承父类的私有成员

public class Test1 { private int t1 = 1; public int getT1() { return t1; } public void setT1(int t1) { this.t1 = t1; } } 以上是Test1类,有个private的t1,值为1,给了get/set方法. public class Test2 extends Test1 { private int t1 = 2; public static void main(String[] a

java中Collection类及其子类

1:对象数组(掌握) (1)数组既可以存储基本数据类型,也可以存储引用类型.它存储引用类型的时候的数组就叫对象数组. 2:集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组 而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用. (2)集合和数组的区别? A:长度区别 数组固定 集合可变 B:内容区别 数组可以是基本类型,也可以是引用类型 集合