强转后子类对象独有的成员变量与方法还可以调用吗
时间: 2023-08-06 10:03:27 浏览: 91
在将子类对象强制转换为父类对象后,我们只能调用父类中定义的成员变量和方法,而无法直接调用子类独有的成员变量和方法。但是,如果我们确定该父类对象实际上是一个子类对象,我们可以将父类对象再次强制转换为子类对象,从而访问子类独有的成员变量和方法。示例如下:
```java
public class Animal {
public void eat() {
System.out.println("Animal is eating");
}
}
public class Dog extends Animal {
private int age;
public Dog(int age) {
this.age = age;
}
@Override
public void eat() {
System.out.println("Dog is eating");
}
public void bark() {
System.out.println("Dog is barking");
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(3);
animal.eat(); // 输出 "Dog is eating"
Dog dog = (Dog) animal;
dog.bark(); // 输出 "Dog is barking"
System.out.println("Dog's age is " + dog.getAge()); // 输出 "Dog's age is 3"
}
}
```
在这个例子中,我们创建了一个Dog类型的对象dog,并将它强制转换为Animal类型的变量animal。由于Dog是Animal的子类,因此可以将Dog类型的对象赋值给Animal类型的变量。此时,我们只能调用Animal类中的方法,也可以调用Dog类中继承自Animal类的方法,但无法直接调用Dog类中独有的成员变量和方法。
接下来,我们将animal对象再次强制转换为Dog类型的变量dog,这样就可以访问Dog类中独有的成员变量和方法了。这里需要注意的是,在将父类对象强制转换为子类对象之前,需要确保该父类对象实际上是一个子类对象,否则可能会引发ClassCastException异常。
阅读全文