java向上轉型和向下轉型1


  在java繼承體系中,認為父類(超類)在上層,子類在下層(派生類) ,向上轉型就是把子類對象轉成父類對象。

1 public class Father {    
2     public void eat(){
3         System.out.println("我是父類的方法吃。。。。。");
4     }
5 }
1 public class Son extends Father{
2     
3     public void eat(){
4         System.out.println("我是Son的方法吃。。。。。");
5     }
6     public void sleep(){
7         System.out.println("Son睡覺");
8     }
9 }

 測試

 1 public static void main(String[] args) {
 2            Father f=new Son();//子類向上轉型           
 3            Person p=new Son();//普通的new
 4            f.eat();    
 5             //f.sleep();無法調用此方法 此方法不存在
 6            p.eat();
 7            p.sleep();
 8     
 9         
10     }    
11  運行結果: 我是子類的方法吃
12                 我是子類的方法吃
13                 睡覺

  此處無法調用f.sleep() ,就是向上轉型之后會失去父類中沒有定義的方法,只能調用父類中定義的方法。那到底 向上轉型有什么用處那 為何不直接那子類自己定義的對象直接調用?

   如果直接new Son() 打點調用也可以  這樣就沒有體現出面向對象的抽象的編程思想,而且 代碼的可擴展性差。 

   若果該父類還有一個子類Son1 

1 public class Son1 extends Father {
2     public void eat(){
3         System.out.println("son1 的eat方法");
4     }
5     public void sleep(){
6         System.out.println("son1 的sleep方法");
7     }
8 
9 }

  看下邊測試代碼

 1 public class Test {
 2     public static void main(String[] args) {
 3        
 4         tt(new Son());
 5         tt(new Son1());
 6     }
 7     
 8     
 9     public static void tt(Son son){
10         
11         son.eat();
12     }
13     public static void tt(Son1 son){
14         
15         son.eat();
16     }
17 
18 }

    我的tt方法 中需要調用 各個子類的一些或所有方法,代碼如上所示,假若我有很多個子類 這樣 代碼就顯的特別沉於 重復率太高

  向上轉型就可以完美的解決此類問題:無論我有多少個子類都可以 一個方法搞定。。

    

 1 public class Test {
 2     public static void main(String[] args) {
 3        
 4         tt(new Son());
 5         tt(new Son1());
 6     }
 7     
 8     
 9     public static void tt(Father son){
10         //父類對象當做實例化參數
11         son.eat();
12     }
13 }

 

 

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM