Java中多态中父类指向子类对象后怎么调用父类中的方法
时间: 2023-02-05 11:06:39 浏览: 65
在 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` 方法。
相关问题
java中多态的左右
Java中的多态是指通过父类的引用变量来调用子类的方法,实现不同对象的动态绑定。多态有两个方面的含义:编译时多态(静态多态)和运行时多态(动态多态)。
编译时多态是通过方法的重载和重写来实现的。方法的重载是指在一个类中定义了多个相同名字但参数列表不同的方法,编译器根据方法调用时传入的参数类型来决定具体调用哪个方法。方法的重写是指子类重新定义了父类中已经存在的方法,并且方法名、返回类型、参数列表都相同。在编译时,编译器会检查调用方法的对象的声明类型,根据声明类型确定可以调用哪些方法。
运行时多态是通过父类的引用变量指向子类的对象来实现的。在编译时,编译器只会检查引用变量的声明类型,而不会考虑引用变量指向的实际对象类型。在运行时,JVM会根据实际对象类型来确定调用哪个方法,实现动态绑定。
总结起来,多态使得程序能够以统一的方式处理不同类型的对象,提高了代码的灵活性和可扩展性。
用java举例父类类型的引用指向不同的子类对象。
当使用Java来实现多态时,可以通过父类类型的引用指向不同的子类对象。以下是一个简单的示例:
```java
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("Dog barks");
}
}
class Cat extends Animal {
@Override
public void sound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.sound(); // 输出:Dog barks
animal2.sound(); // 输出:Cat meows
}
}
```
在上面的例子中,Animal类是父类,Dog和Cat类是子类。通过创建Animal类型的引用animal1和animal2,分别指向Dog和Cat的对象。当调用animal1和animal2的sound()方法时,根据对象的实际类型,会分别调用Dog类和Cat类中重写的sound()方法,实现了多态性。