当前位置: 首页 > 工具软件 > Upcast > 使用案例 >

Java中继承抽象类的downcast和upcast

松昱
2023-12-01

test1( ) needs the downcast to call f( ), while test2( ) doesn’t need a downcast
because f( ) is defined in the base class.

/****************** Exercise 4 *****************
* Create an abstract class with no methods.
* Derive a class and add a method. Create a
* static method that downcasts a reference from
* the base class to the derived class and calls
* the method. Demonstrate that it works in main().
* Eliminate the need for the downcast by moving
* the abstract declaration to the base class.
***********************************************/
package interfaces;
abstract class NoMethods {}
class Extended1 extends NoMethods {
public void f() {
System.out.println("Extended1.f");
}
}
abstract class WithMethods {
abstract public void f();
}
class Extended2 extends WithMethods {
public void f() {
System.out.println("Extended2.f");
}
}
public class E04_AbstractBase {
public static void test1(NoMethods nm) {
// Must downcast to access f():
Interfaces 129
((Extended1)nm).f();
}
public static void test2(WithMethods wm) {
// No downcast necessary:
wm.f();
}
public static void main(String args[]) {
NoMethods nm = new Extended1();
test1(nm);
WithMethods wm = new Extended2();
test2(wm);
}
} /* Output:
Extended1.f
Extended2.f
*///:~
 类似资料: