在将一个子类对象赋给超类对象时,只能访问超类中定义的方法和属性,而无法直接访问子类中特有的方法和属性。如果子类中定义了一个重载方法,也无法直接执行该方法。
解决这个问题的一种常见方法是使用类型转换(Type Casting)来将超类对象转换为子类对象,并通过转换后的对象来执行子类的重载方法。具体步骤如下:
- 定义一个超类(SuperClass)和一个子类(SubClass):
class SuperClass {
public void print() {
System.out.println("This is the superclass.");
}
}
class SubClass extends SuperClass {
@Override
public void print() {
System.out.println("This is the subclass.");
}
public void extraMethod() {
System.out.println("This is a method only in subclass.");
}
}
- 创建一个子类对象,并将其赋给超类对象:
SuperClass superObj = new SubClass();
- 将超类对象转换为子类对象:
SubClass subObj = (SubClass) superObj;
- 执行子类的重载方法:
subObj.print();
完整的代码示例如下:
class SuperClass {
public void print() {
System.out.println("This is the superclass.");
}
}
class SubClass extends SuperClass {
@Override
public void print() {
System.out.println("This is the subclass.");
}
public void extraMethod() {
System.out.println("This is a method only in subclass.");
}
}
public class Main {
public static void main(String[] args) {
SuperClass superObj = new SubClass();
SubClass subObj = (SubClass) superObj;
subObj.print();
}
}
输出结果为:
This is the subclass.
通过类型转换,我们成功地执行了子类的重载方法。请注意,在进行类型转换时,需要确保超类对象实际上是子类的实例,否则会导致运行时异常。