JAVA 父类接受子类对象,可以调用子类有而父类中没有的对象吗?
时间: 2023-10-02 18:13:06 浏览: 62
当父类接收子类对象时,只能调用在父类中定义的方法和属性。如果子类中有而父类中没有的方法和属性,父类是无法直接调用的。
但是,可以通过将父类类型的变量强制类型转换为子类类型,从而调用子类中特有的方法和属性。例如:
```
Animal animal = new Dog();
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.bark(); // 调用子类Dog中的bark方法
}
```
这里首先将 Animal 类型的 animal 变量强制转换为 Dog 类型,然后就可以调用 Dog 中特有的方法 bark() 了。但是需要注意的是,如果 animal 引用的对象实际不是 Dog 类型的对象,那么强制转换会导致运行时异常。因此,在进行强制类型转换时,需要使用 instanceof 运算符进行类型检查,以确保安全转换。
相关问题
JAVA 父类接受子类对象
在 Java 中,可以使用多态的特性,使得父类类型的变量可以接受子类对象。
例如,假设有一个 Animal 类作为父类,有一个 Dog 类作为子类,那么可以这样声明一个 Animal 类型的变量:
```
Animal animal = new Dog();
```
这样,animal 变量就可以接受 Dog 类型的对象,也可以调用 Dog 类型对象中的方法。这就是Java中的多态特性。
Java中多态中父类指向子类对象后怎么调用父类中的方法
在 Java 中,如果一个父类的引用指向了一个子类的对象,你可以通过这个引用来调用父类中的方法。
例如:
```
class Animal {
public void move() {
System.out.println("动物可以移动");
}
}
class Dog extends Animal {
public void move() {
System.out.println("狗可以跑和走");
}
public void bark() {
System.out.println("狗可以叫");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
a.move(); // 输出 "狗可以跑和走"
}
}
```
在这个例子中,我们创建了一个 `Dog` 类,它继承了 `Animal` 类,并重写了 `move` 方法。我们创建了一个 `Dog` 类的实例,并将它赋值给一个 `Animal` 类的引用。当我们调用 `a.move()` 时,Java 会去调用子类中重写的 `move` 方法,输出 "狗可以跑和走"。
注意:如果你想调用父类中没有被子类重写的方法,你可以使用 `super` 关键字来调用父类中的方法。例如,你可以在子类中使用 `super.move()` 来调用父类中的 `move` 方法。