java继承情况下运行类型和编译类型
时间: 2024-05-31 18:07:07 浏览: 10
在Java继承中,运行类型和编译类型是两个不同的概念。
编译类型是指在编译时声明的类型,即变量或方法的类型。例如,如果一个变量声明为Animal类型,那么它的编译类型就是Animal。
运行类型是指实际运行时对象的类型。例如,如果一个变量声明为Animal类型,但是实际对象是Dog类型的对象,那么它的运行类型就是Dog。
在继承中,子类可以继承父类的属性和方法。在这种情况下,如果一个变量或方法在父类和子类中都存在,那么在编译时它的类型是父类类型,而在运行时它的类型可能是父类类型或子类类型,具体取决于实际对象的类型。
例如,假设有一个Animal类和一个Dog类,Dog类继承自Animal类。现在有一个变量声明为Animal类型,但是实际对象是Dog类型的对象。在编译时,这个变量的类型是Animal类型,在运行时它的类型是Dog类型。因此,如果这个变量调用了Animal类中的方法,实际上会调用Dog类中重写的方法。这就是多态的体现。
相关问题
Java中运行时多态和编译时多态
有什么区别?
在 Java 中,运行时多态和编译时多态都是通过继承和重写方法来实现的。编译时多态是指在编译时就能确定被调用的方法,而运行时多态是指在运行时根据对象的实际类型来确定被调用的方法。
在编译时多态中,如果存在多个同名方法,编译器会根据参数的类型和数量来进行方法的选择。这种方法的调用方式也叫做静态绑定,即在编译期间确定方法的具体执行过程。
而在运行时多态中,方法的调用是根据对象的实际类型来确定的,也叫做动态绑定。这种方法的调用过程是在运行时动态决定的,因此也会受到对象实际类型的影响。
总之,编译时多态和运行时多态在实现方式和调用过程中有很大的区别,需要开发者正确地理解和使用。
java编译时多态 运行时多态
Java中的多态分为编译时多态和运行时多态。
编译时多态(也称为静态多态)是指在编译阶段确定方法的调用,主要通过方法的重载(overload)实现。方法的重载是指在同一个类中定义了多个同名的方法,但这些方法具有不同的参数列表。编译器根据参数列表的类型和数量来确定具体调用哪个方法。这种多态是在编译阶段就可以确定的,不需要等到运行时。
运行时多态(也称为动态多态)是指在程序运行时确定方法的调用,主要通过继承和方法的重写(override)实现。当子类继承父类并重写了父类中的方法时,通过父类引用指向子类对象时,调用该方法时会根据实际的对象类型来确定具体调用哪个方法。这种多态是在程序运行时才能确定的,需要等到运行时。
例如,有一个父类Animal和子类Dog和Cat,它们都有一个叫声的方法speak。在编译时多态中,如果调用animal.speak(),则会根据animal的类型确定具体调用哪个speak方法。而在运行时多态中,如果animal引用指向了Dog对象,则会调用Dog类中重写的speak方法;如果animal引用指向了Cat对象,则会调用Cat类中重写的speak方法。