首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法?

static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建A对象的时候父类会调用子类方法...但是:创建B对象父类会调用父类的方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存中。...如果,子类重写了父类的方法,子类的方法引用会指向子类的方法,否则子类的方法引用会指向父类的方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父类方法,则方法引用会指向父类方法。 当子类对象创建时,会先行调用父类的构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译的时候,父类构造方法调用的方法的参数已经强制转换为符合父类方法的参数了。 上边代码在编译前已经转换为下面这个样子的了。

6.2K10

子类调用父类的同名方法和属性

Python面向对象中,利用子类调用父类的同名方法和属性。...首先我们定义了两个父类,Master和School # @author: 北山啦 # FileName: 12子类调用父类的同名方法 # @time: 2022/6/5 14:54 #父类Master...,子类如何来调用呢 在这里,定义Prentice类,继承了Master和School类,添加了和父类同名属性和方法 调用子类的属性和方法 如果调用了父类的属性和方法,父类属性会自动掩盖子类属性,股灾调用属性前...__init__ print(f'运用{self.kongfu}制作煎饼果子') 调用父类属性和方法 如果调用父类方法,但是为了保障调用到的是父类的属性,必须在方法前调用父类的初始化...__init__ print(f'运用{self.kongfu}制作煎饼果子') '''调用父类方法,但是为了保障调用到的是弗列的属性,必须在方法前调用父类的初始化'''

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    测试环境: win7 64位 Python版本:Python 3.3.5 代码实践: 1、在子类中通过“类名”调用父类的方法 class FatherA: def __init__(self)...__init__(self) # 在子类中调用父类的方法:父类名.方法名称(参数) if __name__ == '__main__': b = SubClassB() 运行结果: >>> ==...(如类SubClassB的父类由FatherA变为FatherD时),必须遍历整个类定义,把子类中所有的父类类名全部替换过来 2、在子类中通过“super”方法调用父类的方法 场景1、单层继承 class...__init__() # 在子类中调用父类的方法:super().方法名称(参数) if __name__ == '__main__': b = SubClassB() class FatherA...,继承多个父类,以super().method(参数)方法调用父类的方法,如果不同父类中存在同名方法method(不管参数列表是否相同),则按继承顺序,选择第一个父类中的方法。

    3.2K30

    Java中类的加载机制---父类和子类的多态调用

    null 1) 上面程序最大的难点,也是最重要的地方就是:在父类的构造函数中调用了虚函数,并且这个函数被子类重载了 2) 继承的时候,子类与父类有着同名的属性和同名的方法,关于同名的属性的初始化过程也是必须要了解的...也就是说,父类的存储空间的分配是在子类前面完成的;还可以这样说,当执行到子类的构造函数的时候,首先第一个代码是执行super(),哪怕你没有显示的写出来,他也是会去执行父类的实例化,这就是子类如果想完成初始化...Java 中子类加载的机制是第三个需要理解的地方: 1)相关的类的加载机制还是跟  上面第二点相似,只是在子类初始化的时候必须先去初始化父类 2)只有 等Java机制给子类和所有的父类都分配了内存空间之后...;同名方法是多态,只会去调用子类的重载方法, 这个规则说白了,就是当有父类和子类的时候,必须都所有的存储空间都分配好了,才能执行  属性的初始化,继而是构造函数;同时要明白一点,子类的构造函数是在父类的构造完成之后才会去执行...,多态的调用 7)子类有重载,所以调用子类的方法,但是子类的baseName还没有初始化,所以就没有直接打出null了 8)父类创建完毕,接下来就是去执行子类的创建工作了, 9)首先为子类的属性进行初始化

    2.8K40

    关于使用MethodHandle在子类中调用祖父类重写方法的探究

    关于使用MethodHandle在子类中调用祖父类重写方法的探究 注:这个例子原本出现在周志明先生的《深入理解Java虚拟机》--虚拟机字节码执行引擎章节,介于有读者朋友有疑问,这里基于Java代码层面解释一下...这里直接看Son类的thinking方法(关于为何这样实现,在《深入理解Java虚拟机》读书笔记(七)--虚拟机字节码执行引擎(下)中也解释了)。...在普通的方法调用中,这个this参数是虚拟机自动处理的,表示的是当前实例对象,我们在方法中可以直接使用。...基于这个事实,我们这时可以直接在GrandFather的thinking方法中调用Son类独有的方法,使用反射或者直接类型强制转换为Son就行了。...这个参数中指定的是方法接收者的类型,bindTo指定的接收者的类型必须要是这个类或子类,不然会出现ClassCastException异常。

    9.5K30

    【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 接口 方法 super )

    子类选择调用不同的 父类 / 接口方法 ( super ) I . 子类调用父类总结 ---- 1 ....super 关键字进行简单调用即可 ; ② 子类内部类调用父类 : 如果想要在子类的内部调用父类的成员和方法 , 需要使用 super@子类名称 调用 ; ③ 子类调用不同父类的同名方法 : 如果子类继承的父类...子类调用父类方法 ( super ) ---- 子类调用父类方法 : 子类中可以通过 super 调用父类的方法 , 包括普通方法 , 和属性访问的 setter 方法 ; 其中的 super 相当于父类对象的引用...子类内部类调用父类方法 ( super@ ) ---- 子类内部类调用父类方法 : 在子类的内部类中 , 如果想要访问父类的方法 , 可以使用 super@子类名称.父类方法() 的形式 , 调用父类的方法...代码示例 : 代码中定义了一个父类 Father , 接口 Build , 父类和接口 都定义了 action 方法 , 子类 Son 继承父类 , 实现 Build 接口 , 子类通过 super 调用父类中的成员或方法

    1.6K10

    父类中如果没有无参构造方法(也即父类中只给了带参构造方法),子类的构造方法怎么办?

    父类中如果没有无参构造方法(也即父类中只给了带参构造方法),子类的构造方法怎么办? /* 父类中如果没有无参构造方法(也即父类中只给了带参构造方法),子类的构造方法怎么办?   ...法1:子类的构造方法通过 super(...); 去显示调用父类的带参构造方法。   ...法2:子类的构造方法通过 this();/this(...); 调用本类的其他的构造方法,但是子类的其他的构造方法中一定会有一个去访问了父类的带参构造方法。   法3:让父类提供无参构造。...;/super(...); 这三个语句访问子类或父类的构造方法的时候,必须放在第一句语句上。         否则,就可能会对父类数据进行多次初始化。 */ 示例代码如下图所示: ?

    1.5K10

    【C++】继承 ⑩ ( 继承机制中的 static 静态成员 | 子类中访问父类静态成员的方法 )

    派生类 ) 共享 ; 2、父类静态成员访问控制权限的改变 继承自 父类的 静态成员变量 , 仍然遵循 继承中 子类的 访问控制特性 , public 公有继承 : 父类成员 在 子类 中 , 访问控制权限...不变 , 共有 和 保护成员 可以在子类访问 , 私有成员不可在子类中访问 ; 父类中的 public 成员 仍然是 public 成员 ; 父类中的 protected 成员 仍然是 protected...成员 ; 父类中的 private 成员 仍然是 private 成员 ; protected 保护继承 : 父类成员 在 子类 中 , 访问控制权限 变为 protected , 基类的 公有成员...和 保护成员 可以在子类访问 , 私有成员不可在子类中访问 ; 父类中的 public 成员 变为 子类中的 protected 成员 ; 父类中的 protected 成员 仍然是 protected...成员 ; 父类中的 private 成员 仍然是 private 成员 ; private 私有继承 : 父类成员 在 子类 中 , 所有成员的访问控制权限 变为 private , 基类的 所有成员

    55010

    没想到吧,PHP 中在类的外部也可以调用私有方法!

    一般来说,在 Class 的外部是无法调用私有方法,这也是 Private 字面的意思,但是一些很特殊很特殊的情况下,如果需要调用,是否可以呢?其实可以使用类的反射来实现。...reflection->getClosure($object); } return call_user_func_array($callback, $args); } 简单解释一下,首先还是简单判断该方法是否存在...,接着获取对象方法的放射,然后判断一下是不是公共的方法,如果是公共就正常调用,不是则获取其闭包,最后使用回调的方式来调用。...这个函数可以让你调用对象的私有或者受保护方法,建议一些特殊的情况下才使用。为了方便大家调用,新版的 WPJAM Basic 也会集成该函数。----

    1K30

    在C++中反射调用.NET(一) 反射调用第一个.NET类的方法

    为什么要在C++中调用.NET 一般情况下,我们常常会在.NET程序中调用C/C++的程序,使用P/Invoke方式进行调用,在编写代码代码的时候,首先要导入DLL文件,然后在根据C/C++的头文件编写特殊的...extern int Multiply(int factorA, int factorB); 详细的过程,可以参考之前我这篇文章:《C#调用C和C++函数的一点区别》 有时候,我们也会有在C++中调用...注意,本文说的C++反射调用,不是对C++自身进行封装的反射功能,而是在C++/CLI代码中反射调用.NET代码,原理上跟你在.NET应用中反射调用另外一个.NET的程序集一个道理。...在C++中,类的成员用 -> 符号调用,命名空间或者类的静态成员,用::调用,例如上面的构造函数中的代码: Assembly^ ass = Assembly::LoadFrom(this->assemblyFile...在C++/CLI中使用反射 反射调用第一个.NET类的方法 下面的方法,将会反射调用 User类的一个最简单的方法 : public int GetUserID(string IdString){} 该方法只有一个一个参数和一个简单的返回值

    3.2K100

    基因组选择和SNP分析在ASREML-SA中的实现方法

    基因组选择在育种中的应用, 其基础是常规的系谱动物模型, 动物模型也可以很复杂, 看一下asreml的说明书就知道了, 有300多页, 据我了解, 其厚度可以用这个公式表示: ?...这个教程是asreml在基因组选择和分子育种中的应用, 下面是我的读书笔记....简介 这篇文档的主要目标是介绍ASReml在基因组分析中的实现方法, 它假定读者有一定的统计基础....相关的R包, 参考wgaim包 在下一章节中, 我们将对GS的延伸方法: Fast Bayes A进行介绍. 4, 基因组选择的其它方法 EM BayesA-like方法, 参考 Sun et al....PEV会给出标记的标准误, 结果不可靠 基因型的GBLUP在.sln中, mark的效应在.mef中, 标记的权重(weight)在.mef中, 大效应的标记在.res文件中. 6, asreml基因组选择考虑

    1.9K20

    当类中的方法全部都是 static 关键字修饰时 ,它的构造方法最好作为 private 私有化,理由是方法全是 static, 不知道的人会去new对象去调用,需要调用构造方法。 但 static的

    当类中的方法全部都是 static 关键字修饰时 ,它的构造方法最好作为 private 私有化,理由是方法全是 static, 不知道的人会去new对象去调用,需要调用构造方法。...但 static的方法直接用类名调用就行!...的注意事项     a:在静态方法中是没有this关键字的       如何理解呢?       ...----------------------------------------------------------------------------- 静态变量和成员变量的区别)   静态变量也叫类变量...B:内存中位置不同     静态变量存储于方法区的静态区。     成员变量存储于堆内存。   C:内存出现时间不同     静态变量随着类的加载而加载,随着类的消失而消失。

    1.1K20

    【Java】向上转型和向下转型

    当管理员查看这些身份证时,他并不关心具体是哪种动物,只要知道它们是动物园里的“动物”就足够了。这就是向上转型的概念。 例子: 假设你有一个Lion类(狮子类),它是Animal类(动物类)的子类。...这是多态性的一种体现,因为子类对象是父类的一个特例。 在Java中,向上转型是安全的,因为子类继承了父类的所有属性和方法(除了私有方法和构造方法)。...尽管 fruit 是 Fruit 类型,但由于多态性,调用 eat() 方法时实际上会执行 Apple 类中重写的 eat() 方法。 这就是向上转型和多态性的实际应用。...当向一个接受父类类型参数的方法传递一个子类对象时,也会发生向上转型。...这个过程是显式的,需要使用强制类型转换操作符来完成。 在Java中,子类拥有父类的所有属性和方法(除了 private 修饰的属性和方法),同事还可以定义自己特有的属性和方法。

    17510

    充电篇:再也不怕面试官问你Java基础了

    多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。...对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。...clone在第一步是和 new 相似的,都是分配内存,调用 clone 方法时,分配的内存和原对象(即调用 clone 方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域,填充完成之后,...错误 在类内部可以用户可以使用关键字**this.构造方法名()**调用(参数决定调用的是本类对应的构造方法) 在子类中用户可以通过关键字**super.父类构造方法名()**调用(参数决定调用的是父类对应的构造方法...可用场景:创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象 // 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的, // 这里的软引用指的是指向

    14810

    充电篇:你了解Java概述吗?

    多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。...对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。...clone在第一步是和 new 相似的,都是分配内存,调用 clone 方法时,分配的内存和原对象(即调用 clone 方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域,填充完成之后,...错误 在类内部可以用户可以使用关键字**this.构造方法名()**调用(参数决定调用的是本类对应的构造方法) 在子类中用户可以通过关键字**super.父类构造方法名()**调用(参数决定调用的是父类对应的构造方法...可用场景:创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象 // 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的, // 这里的软引用指的是指向

    15020
    领券