当前位置:首页 > 开发 > 编程语言 > Java > 正文

Java 子类与父类这间的转换

发表于: 2011-09-15   作者:周凡杨   来源:转载   浏览:
摘要:     最近同事调的一个服务报错,查看后是日期之间转换出的问题。代码里是把 java.sql.Date 类型的对象 强制转换为 java.sql.Timestamp 类型的对象。报java.lang.ClassCastException。       代码:            

    最近同事调的一个服务报错,查看后是日期之间转换出的问题。代码里是把 java.sql.Date 类型的对象 强制转换为 java.sql.Timestamp 类型的对象。报java.lang.ClassCastException。

 

    代码:

              java.sql.Date date = new java.sql.Date(2011,9,15);

      Timestamp ts = (Timestamp)date;

 

      这样的代码根据就编译不过。因为查看Java的Api,会发现 java.sql.Timestamp 继承 java.util.Date,同样 java.sql.Date 也继承 java.util.Date 。两个没有继承关系的类对象是不能进行转换的。

 

     解决办法:

                  java.sql.Date date = new java.sql.Date(2011,9,15);

 Timestamp ts = new Timestamp(date.getTime());

 

借此也想深入研究一下Java的父类与子类之间转换的问题。

 

 

      例子: 父类:

public class ParentClass {

 

private String privateStr = "privateStr var";

public String  publicStr = "publicStr var";

public String sayHello(){

return "hello , this is a parentclass's function";

}

}

 

       子类:

public class ChildClass extends ParentClass {

 

private String inStr = "hello icepeter";

public String  outStr = "hello everyone";

public String goHome(){

return "go home!";

}

}

 

 

测试类:

 

public class Test {

 

public static void main(String[] args) {

 

//测试一:子类转父类

ParentClass pc1 = new ChildClass();     //上溯造型

System.out.println(pc1.publicStr);

//System.out.println(pc1.privateStr); 访问父类里的私有变量出错

System.out.println(pc1.sayHello());

//System.out.println(pc1.goHome());     访问子类里的公有方法出错

//System.out.println(pc1.outStr);       访问子类的变量出错

 

//测试二:父类转子类

//第1种情况  会抛出  java.lang.ClassCastException: 

ParentClass pc2 = new ParentClass();

ChildClass cc2  = (ChildClass) pc2;     //这里必须强制类型转换  //下溯造型

System.out.println(cc2.publicStr);      

System.out.println(cc2.outStr);      

System.out.println(cc2.sayHello());      

System.out.println(cc2.goHome());     

 //第2种情况   

ChildClass  ccS = new ChildClass();

ParentClass pc3 = ccS;

ChildClass cc3  = (ChildClass) pc3;     //这里必须强制类型转换   //下溯造型

System.out.println(cc3.publicStr);      

System.out.println(cc3.outStr);      

System.out.println(cc3.sayHello());      

System.out.println(cc3.goHome()); 

 

}

 

}

 

总结:

如果一个对象与另一个对象没有任何的继承关系,那么他们就不能进行类型转换。如果要把一个派生类对象赋值给基类对象这个称为上溯造型。如果要把基类对象赋值给派生类对象就需要强制类型转换,这称为下溯造型,下溯造型有一些危险,要安全的进行下溯造型有一个前题,基类对象必须是从派生类对象中上溯过来的。

 

 

 

 

 

 

 

 

 

 

 

Java 子类与父类这间的转换

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1:类属性 父类: public class Father { public String field = "父类变量"; public final String f
之前在项目中碰到这样一个问题:   类B继承了类A,B在实例化的时候,A的构造方法中调用了B的某个
抽象类:具有抽象方法的类,需要使用abstract关键字修饰 关系图 下面上代码 package com.ray.testob
抽象类:具有抽象方法的类,需要使用abstract关键字修饰 关系图 下面上代码 package com.ray.testob
using System; namespace 父类子类 { class Person { public Person() { Console.WriteLine("我是父
子类继承父类实现父类的代理方法 父类提供虚函数(OC中称为代理方法),子类继承后实现虚函数来实现特
Ref : 1.error:http://stackoverflow.com/questions/22321272/class-does-not-contain-a-construct
例如: 有以下2个类 public class Father { public int age = 70; public static string name = "父
一、父类与子类 1.父类与子类的相互转换 派生类的对象可以赋给基类,反之不行 基类的指针可以指向派
书中看到: 子类继承父类,子类拥有了父类的所有属性和方法。 程序验证,父类的私有属性和方法子类
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号