Java中的向上造型和向下造型等


package com.study.oop.day01;
/**
 * 如果某個方法是靜態 的,它的行為就不具有多態性
 * @author LuHongGang
 * @date 2017年6月5日
 * @time 下午4:19:21
 * @since 1.0
 * 構造函數並不具有多態性,它們實際上是static方法,
 * 只不過該static聲明是隱式的。因此,構造函數不能夠被override。
 */
public class staticDemo {
public static void main(String[] args) {
 
StaticSuper ss = new StaticSub();
ss.StaticMethod();                              // 這里調用的是父類中的靜態方法  子類不能都重寫父類中的該靜態方法
ss.NotStaticMethod();
//ss.ThisMethodIsNotExistsInSuper();            // 程序編譯不通過,向上造型   初始化后的對象只能調用 父類類型的方法和屬性
/**
* Java 中向上造型: 父類類型的引用 指向子類的對象
* StaticSuper ss = new StaticSub();
*/
StaticSuper ss2 =  new StaticSuper();           // 向下造型
StaticSub  ss3 = (StaticSub) ss;              
//ss2.ThisMethodIsNotExistsInSuper();
//StaticSub ss4 = (StaticSub) new StaticSuper();//編譯通過 ,運行異常
//ss3.ThisMethodIsNotExistsInSuper(); 運行時異常
System.out.println(ss3.name);
// 所以向下造型的時候 需要使用instanceof 
if(ss2 instanceof StaticSub){                   // 向下造型 的時候強制需要進行 判斷  false
StaticSub ss5 = (StaticSub) ss2;
            System.out.println(ss5.name);
}else{
System.out.println(" 左邊對象不是右邊類的實例 ");
}
if(ss instanceof StaticSub){                    // true
StaticSub ss6 = (StaticSub) ss;
System.out.println(" 左邊對象是右邊類的實例 ");
ss6.ThisMethodIsNotExistsInSuper();         
}
}
}
class StaticSuper{
public static void StaticMethod(){
System.out.println("我是   父類   的靜態方法");
}
public void NotStaticMethod(){
System.out.println("我是   父類   的非靜態方法");
}
}
class StaticSub extends StaticSuper{
String name = "10010";
public static void StaticMethod(){
System.out.println("我是  子類  的靜態方法");
}
public void NotStaticMethod(){
System.out.println("我是  子類  的非靜態方法");
}
/**
*  該方法 在父類中並不存在,僅僅在子類中獨有  
*  
*/
public void ThisMethodIsNotExistsInSuper(){
System.out.println("僅僅是子類獨有的方法,這是 本類的一個擴展");
}
}


免責聲明!

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



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