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),这编译能通过,但运行时异常。