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("僅僅是子類獨有的方法,這是 本類的一個擴展");
}
}