java 子类转父类_Java 子类与父类这间的转换

最近同事调的一个服务报错,查看后是日期之间转换出的问题。代码里是把 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());

}

}

总结:

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

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2011-09-15 23:23

浏览 10693

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值