最近被一个问题困扰就是关于JAVA的多态,
子类继承父类,而且子类重写父类方法,再加上子类以父类的身份出现就是多态。可是为什么把子类向上转型为父类的时候,父类可以访问子类的重写的方法?而不是父类本来的方法?我知道多态有个叫动态绑定,可具体动态绑定的机制是什么原理是什么?请高手指点。
例如测试下面方法如下:
class Person{
public void run(){
System.out.println("人跑");
}
}
class Student extends Person{
public void run(){
System.out.println("学生跑");
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p=new Student();
p.run();
}
}
}
虽然说是多态会调用子类的方法,可我就是不懂为什么会调用子类了,请高手指点下?谢谢了
分享到:
相关推荐
父类引用不能访问子类特有的方法和属性,但可以调用继承自父类的方法。 接下来,我们来看一下相关的知识点: 1. **方法覆盖**:当子类继承父类并重写父类中的方法时,通过父类引用调用该方法,将执行子类中的版本...
在Java中,我们可以通过父类的引用变量来指向子类的对象,这种现象被称为“向上转型”(Upcasting)。例如: ```java class Animal {} // 父类 class Cat extends Animal {} // 子类 public class Test { public ...
这里的 b 是子类对象,我们可以使用强制类型转换来将父类对象 a 转换为子类对象 B,然后可以访问子类对象 B 的特有方法 b1()。 向上转型和向下转型是 Java 编程中两种非常重要的概念,它们可以使我们的代码更加灵活...
即使父类引用没有直接指向子类的特有方法,但这些方法仍然存在于子类的元数据中,因此,如果通过子类引用调用,仍然可以访问到这些非继承成员。 这种机制在设计上保证了多态性的灵活性,同时又不会牺牲子类的特有...
这就说明了向上转型后,子类对象虽然可以被视为父类对象,但不能访问父类中不存在的方法,这限制了子类的某些特性。 2. 第二个场景中,我们引入了`BMW`类,它也是`Car`的子类。然后定义了一个`show`方法,接受一个`...
向下转型则是将父类引用转换为子类引用,以便访问子类特有的特性和方法。这是一个显式的过程,需要使用`instanceof`关键字和强制类型转换。例如: ```java Dog dog = (Dog) animal; // 向下转型,假设animal确实是个...
向下转型:父类引用转为子类对象,可以访问子类的特有功能(新增方法)。 代码: class 张三爹{ int age = 45; public void teach(){ System.out.println(讲解java); } } class 张三 extends 张三爹{ int age
向上转型的一个关键限制是,父类引用只能访问其自身定义的成员,而不能访问子类中新增的成员。比如,尽管`b`实际上指向的是`Bird`对象,但是`b`无法调用`Bird`特有的`fly()`方法。 ### 向上转型的好处 向上转型...
- **向下转型**:如果需要访问子类特有的方法或属性,则需要进行向下转型。但是需要注意类型检查,防止运行时出现`ClassCastException`异常。 - **实例变量**:上转型对象只能访问父类中声明的实例变量,而不能访问...
向上转型是将子类对象赋值给父类引用的过程,是一种自动类型转换,此时可以调用父类中的方法,如果方法在子类中被重写了,那么会调用子类中的实现,这种机制被称为动态绑定。多态的实现减少了代码的冗余,提高了程序...
- 不能使用子类的特有成员:由于父类引用只能调用父类中的成员(包括被重写的方法),无法直接访问子类特有的成员变量或方法,需要通过强制类型转换解决。 1.4 多态中的转型 - 向上转型(Upcasting):父类引用...
向下转型可以将父类对象转换为子类对象,然后调用子类的方法或访问子类的属性。 例如,下面是一个简单的示例代码: ```java public class Human { String name = "Human"; public String getName(){ return ...
标题"cpp代码-C++:类02__多继承(子类对象可以转换成父类对象)"明确指出我们将关注的是C++中的多继承,并且会讨论如何将子类对象转换为父类对象,这是多继承的一个关键特性,被称为向上转型。 在C++中,多继承的...
10. **运行时多态**:Java的多态性是在运行时决定的,这意味着只有在运行时才能确定实际的对象类型,这也是为什么上转型对象能在运行时调用子类覆盖的父类方法。 在提供的文件`ClassUpTurn.java`和`TestClassUpTurn...
- 向上转型(父类引用指向子类对象)允许任何子类对象赋值给父类引用,调用的方法是子类覆写过的版本。 - 向下转型(父类引用转为子类对象)需要明确指定子类类型,并确保对象实际是该子类的实例。 8. **`...
在子类中,`super`可以用来调用父类的构造器、方法或访问父类的成员变量。 **对象的上、下转型** 对象的上转型是指将子类对象赋值给父类引用,允许调用父类中的方法。下转型则是将父类对象转换为子类对象,需要...
子类重写方法时的访问修饰符可以大于或者等于父类方法的访问修饰符。重写后的方法会被优先调用。 六、自动转型 自动转型是指子类对象可以被转型为父类对象,实现方法的调用。自动转型的格式如下: ```java 父类名 ...
- 强制转型(向下转型)允许将父类引用转换为子类对象,以便访问子类特有的属性和方法,但需要确保转换的安全性。 - 自动转型有助于减少冗余代码,扩大方法的访问范围。 5. **多态**: - 多态是Java中的一大特性...
* 向上转型:子类对象 → 父类对象 * 向下转型:父类对象 → 子类对象 五、抽象类和接口 抽象类和接口是JAVA中两种特殊的类。 * 抽象类:包含一个或多个抽象方法的类 * 接口:包含多个抽象方法和全局常量的集合 ...
向上转型是父类引用指向子类对象,实现了多态,但无法访问子类特有的非重写成员。向下转型则是将父类引用转换为子类引用,需要注意类型安全,避免出现ClassCastException。 总结来说,Java的跨平台能力是通过JVM...