【JAVA學習路-think in java】p167:upcast與downcast的使用規則

package pkg;

class Useful{
	public void f() {System.out.println("f(x)");};
	public void g() {System.out.println("g(x)");};
}
class MoreUseful extends Useful{
	public void f() {System.out.println("f(x)");};
	public void g() {System.out.println("g(x)");};
	public void u() {System.out.println("u(x)");};
	public void v() {System.out.println("v(x)");};
	public void w() {System.out.println("w(x)");};
}


public class p167 {
	public static void main(String[] args) {
		Useful[] x= {new Useful(),new MoreUseful()};
		//DOWNcast one SubClass to BaseClass:x[1]
	
		x[0].f();
		x[1].g();
		//x[1].u();compile error
		((MoreUseful)x[1]).u();//DOWNCAST
		//((MoreUseful)x[0]).u();//exception thrown,but with SUCCESSFUL compiling
		}
}

OUTPUT:

f(x)
g(x)
u(x)
 

package pkg;

class FatherClass {
    int a;
    FatherClass() {
        a = 5;
    }
    public void superPrint() {
        System.out.println("Father, a =" + a);
    }
}

class SonClass extends FatherClass {
    int a;
    SonClass(int a) {
        this.a = a;
    }
    public void subPrint() {
        System.out.println("Son, a = " + a);
    }
}
public class test {
    public static void main(String args[]) {
        //*son-->father--->son:  ALLOWED
    	FatherClass f1 = new SonClass(10);
        f1.superPrint();
        //f1.subPrint();error,LOST sub-method
        SonClass sc = (SonClass) f1;
        sc.subPrint();   
        
        //* father-->son
        FatherClass f2=new FatherClass();
        //SonClass sc2=(SonClass) f2;//exception thrown,but with SUCCESSFUL compiling
        //sc2.subPrint();
    }
}

OUTPUT:

Father, a =5
Son, a = 10
 

總結:

1、欲調用子類方法,若是按son-->father-->son順序Casting,則son對象可以調用son方法;

2、若直接將father--->son(downcast),這編譯能通過,但運行時異常

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章