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());
}
}
總結:
如
果一個對象與另一個對象沒有任何的繼承關系,那么他們就不能進行類型轉換。如果要把一個派生類對象賦值給基類對象這個稱為上溯造型。如果要把基類對象賦值
給派生類對象就需要強制類型轉換,這稱為下溯造型,下溯造型有一些危險,要安全的進行下溯造型有一個前題,基類對象必須是從派生類對象中上溯過來的。
總結
以上是生活随笔為你收集整理的java父类转换成子类_【转】java 父类与子类的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器支持java_为什么我下载了jav
- 下一篇: ivy java_使用Ivy管理项目中的