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

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

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

6.2K10

【JavaSE学习】 Day5JavaSE面向对象(中)看这三篇就够了

特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私的结构。只因为封装性的影响,使得子类不能直接调用父类的结构而已。...三、super关键字 super 关键字可以理解为:父类的 可以用来调用的结构:属性、方法、构造器 super调用属性、方法  我们可以在子类的方法或构造器中。...super调用构造器 我们可以在子类的构造器中显式的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器 "super(形参列表)"的使用,必须声明在子类构造器的首行!  ...我们在类的构造器中,针对于"this(形参列表)"或"super(形参列表)"只能二一,不能同时出现 在构造器的首行,没显式的声明"this(形参列表)"或"super(形参列表)",则默认调用的是父类中空参的构造器...创建子类的对象,在堆空间中,就会加载所父类中声明的属性 从过程上看 当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器,...直到调用了java.lang.Object

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

    3小时Scala入门

    九,集合 集合是一种不可变的类型,并且是无顺序的,适合查找某个元素是否在集合中。 ? ? 十,映射Map 映射和Python中的字典很像,但是Scala中的Map是一种不可变类型。...类的定义中可以用private声明为私有属性和私有方法,只允许在类的作用域访问,不允许在类的外部访问。 可以用protected声明为受保护的属性和方法,只允许在类作用域及其子类作用域中访问。...二十二,构造器 Scala的类包括一个主构造器和若干个(0个或多个)辅助构造器。 主构造器即定义类时传参并用来初始化对象属性的构造器,它是隐含的。...二十四,继承和特征 Scala可以通过extends关键字指定从某个超类(父类)进行继承。 只有子类的主构造器可以调用超类的主构造器。 子类可以使用super引用超类的某个属性和方法。...从变量的定义,函数的定义,判断语句,循环语句到类的定义,都可以看成是这个格式省去某些部分的特例或语法糖等价书写形式。

    1.6K30

    第七章 面向对象编程(进阶)

    有了继承性以后: 子类就获取到了父类中声明的所有的属性和方法。 但是,由于封装性的影响,可能子类不能直接调用父类中声明的属性或方法。...super 可用于在子类构造器中调用父类的构造器 注意: 尤其当子父类出现同名成员时,可以用 super 表明调用的是父类中的成员 super 的追溯不仅限于直接父类 super 和 this 的用法相像...举例 1:子类继承父类以后,对父类的方法进行了重写,那么在子类中,是否还可以对父类中被重写的方法进行调用? 可以!...我们在通过子类的构造器创建对象时,一定在调用子类构造器的过程中,直接或间接的调用到父类的构造器。 也正因为调用过父类的构造器,我们才会将父类中声明的属性或方法加载到内存中,供子类对象使用。 ‍...4.4 super 调用属性、方法 ‍ 子类继承父类以后,我们就可以在子类的方法或构造器中,调用父类中声明的属性或方法。(满足封装性的前提下) 如何调用呢?需要使用"super."

    15110

    3小时Scala入门

    九,集合 集合是一种不可变的类型,并且是无顺序的,适合查找某个元素是否在集合中。 ? ? 十,映射Map 映射和Python中的字典很像,但是Scala中的Map是一种不可变类型。...类的定义中可以用private声明为私有属性和私有方法,只允许在类的作用域访问,不允许在类的外部访问。 可以用protected声明为受保护的属性和方法,只允许在类作用域及其子类作用域中访问。...二十二,构造器 Scala的类包括一个主构造器和若干个(0个或多个)辅助构造器。 主构造器即定义类时传参并用来初始化对象属性的构造器,它是隐含的。...二十四,继承和特征 Scala可以通过extends关键字指定从某个超类(父类)进行继承。 只有子类的主构造器可以调用超类的主构造器。 子类可以使用super引用超类的某个属性和方法。...从变量的定义,函数的定义,判断语句,循环语句到类的定义,都可以看成是这个格式省去某些部分的特例或语法糖等价书写形式。

    1.6K30

    3小时Scala入门

    九,集合 集合是一种不可变的类型,并且是无顺序的,适合查找某个元素是否在集合中。 ? ? 十,映射Map 映射和Python中的字典很像,但是Scala中的Map是一种不可变类型。...类的定义中可以用private声明为私有属性和私有方法,只允许在类的作用域访问,不允许在类的外部访问。 可以用protected声明为受保护的属性和方法,只允许在类作用域及其子类作用域中访问。...二十二,构造器 Scala的类包括一个主构造器和若干个(0个或多个)辅助构造器。 主构造器即定义类时传参并用来初始化对象属性的构造器,它是隐含的。...二十四,继承和特征 Scala可以通过extends关键字指定从某个超类(父类)进行继承。 只有子类的主构造器可以调用超类的主构造器。 子类可以使用super引用超类的某个属性和方法。...从变量的定义,函数的定义,判断语句,循环语句到类的定义,都可以看成是这个格式省去某些部分的特例或语法糖等价书写形式。

    3.5K20

    Java 语言基础 (类和对象, 方法和封装, static 关键字和继承, 多态和特殊类)

    的方式调用成员变量和成员方法 基本概念 若在构造方法中出现, 则代表当前正在构造的对象 若在成员方法中出现, 则代表当前正在调用的对象 工作原理 在构造方法中和成员方法中访问成员变量时, 编译器会自动加上...从 Java 5 开始允许返回子类类型 要求方法的访问权限不能变小, 可以相同或变大 要求方法不能抛出更大的异常 (异常机制) 访问控制符 修饰符 本类 同一个包中的类 子类 其他类 public 可以访问...) 大类型向小类型的转换: 父类转为子类, 叫做向下转型或显式类型转换 若目标类型并不是该引用真正指向的数据类型则编译通过, 运行阶段发生类型转换异常 应该在强转前进行判断, 判断引用变量指向对象是否为后面的数据类型..., 成员方法以及构造方法等 和普通类一样可以使用 final 或 abstract 可以额外使用 private 或 protected 进行修饰 需要外部类对象来创建对象 访问外部类中与本类内部同名的成员变量或方法时...元注解 @Inherited -- 子类继承超类的注解 注解本身不可以继承 如果一个超类被该注解标记过的注解进行注解时, 并且子类没有任何注解应用时, 则子类就继承超类的注解 元注解 @Repeatable

    82430

    Java 中文官方教程 2022 版(五)

    Printed in Subclass 子类构造函数 以下示例说明了如何使用super关键字调用超类的构造函数。回想一下Bicycle示例中MountainBike是Bicycle的子类。...调用超类构造函数的语法是 super(); 或者: super(parameter list); 使用super()时,将调用超类的无参数构造函数。...使用super(parameter list)时,将调用具有匹配参数列表的超类构造函数。 **注意:**如果构造函数没有显式调用超类的构造函数,Java 编译器会自动插入对超类的无参数构造函数的调用。...如果超类没有无参数构造函数,您将会得到一个编译时错误。Object确实有这样一个构造函数,所以如果Object是唯一的超类,就不会有问题。...如果子类构造函数显式或隐式地调用其超类的构造函数,您可能会认为会有一整个构造函数链被调用,一直回溯到Object的构造函数。事实上,情况确实如此。

    11000

    Python学习(七)面向对象 ——继承和多态

    Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类...:       在继承关系中,如果一个实例的数据类型是某个子类,那它也可以被看做是父类(May 既是 Child 又是 Person)。...print_title()方法时,子类的 print_title() 覆盖了父类的 print_title(),在代码运行时,会调用子类的 print_title()       这样,我们就获得了继承的另一个好处...调用方只管调用,不管细节,而当我们新增一种Person的子类时,只要确保新方法编写正确,而不用管原来的代码。...   子类重写构造函数        子类可以没有构造函数,表示同父类构造一致;子类也可重写构造函数;现在,我们需要在子类 Child 中新增两个属性变量:mother 和 father,我们可以构造如下

    30400

    【Java核心面试宝典】Day8、面向对象常见面试题汇总(三)

    调用父类的构造方法,使用 super() 或 super(参数),该语句必须是子类构造方法的第一个语句,且这是调用父类构造方法的唯一方式。 调用父类的方法,使用 super.方法名(参数)。...4、有继承关系时,构造方法的调用顺序是怎样的? 构造一个类的实例时,会沿着继承链调用所有父类的构造方法,父类的构造方法在子类的构造方法之前调用,即构造方法的调用顺序是从父类到子类的。...,Class3 是 Class2 的子类,因此在 Class3 的构造方法中的所有语句运行之前,先调用 Class2 的无参数构造方法。...如果返回值类型是基本数据类型或void,则必须保持一致,如果父类的返回值是引用数据类型,则子类的返回值类型必须与父类一致或者是父类返回值类型的子类。 6、重写和重载的区别是什么?...可见性修饰符 protected 表示类成员可以在同一个包里的任何类中访问,也可以在继承了该类的子类中访问。 8、关键字final用于修饰类和方法时,其含义是什么?

    38110

    Java 中文官方教程 2022 版(四)

    在 Java 语言中,类可以从其他类派生,从而继承那些类的字段和方法。 定义: 从另一个类派生的类称为子类(也称为派生类、扩展类或子类)。从子类派生的类称为超类(也称为基类或父类)。...子类从其超类继承所有成员(字段、方法和嵌套类)。构造函数不是成员,因此它们不会被子类继承,但是可以从子类中调用超类的构造函数。...你可以在子类中声明超类中没有的新方法。 你可以编写一个子类构造函数,隐式地或使用关键字super调用超类的构造函数。 本课程的以下部分将扩展这些主题。...当您通过实例化该类创建对象时,该对象将从所有超类继承字段。如果不同超类的方法或构造函数实例化相同字段会怎样?哪个方法或构造函数将优先?由于接口不包含字段,您不必担心由于状态的多重继承而导致的问题。...定义一个与超类方法具有相同签名的方法 超类实例方法 超类静态方法 子类实例方法 覆盖 生成编译时错误 子类静态方法 生成编译时错误 隐藏 注意:在子类中,您可以重载从超类继承的方法。

    18900

    kotlin基础语法

    // 注解类 accessModifier: 访问权限修饰符 private // 仅在同一个文件中可见 protected // 同一个文件中或子类可见 public // 所有调用的地方都可见...internal // 同一个模块中可见 继承 Kotlin 中所有类都继承该 Any 类,它是所有类的超类,对于没有超类型声明的类是默认超类: class Example // 从 Any 隐式继承...如果子类没有主构造函数,则必须在每一个二级构造函数中用 super 关键字初始化基类,或者在代理另一个构造函数。...初始化基类时,可以调用基类的不同构造方法。...如果你使用匿名对象作为公有函数的 返回类型或者用作公有属性的类型,那么该函数或属性的实际类型 会是匿名对象声明的超类型,如果你没有声明任何超类型,就会是 Any。在匿名对象 中添加的成员将无法访问。

    2.1K20

    Java抽象类与oop三大特征

    所有抽象方法 3、子类中的抽象方法不能与父类的抽象方法同名 4、抽象类不能创建实体,因为抽象类存在抽象方法,而抽象方法没有实体,创建对象后,抽象对象调用抽象方法是没有意义的 5、 抽象类中一定有构造函数...如需父类中原有的方法,可使用 super 关键字,该关键字引用了当前类的父类; 子类重写父类的函数的时候,返回值类型必须是父类函数的返回值类型或该返回值类型的子类,不 能返回比父类更大的数据类型 ;...子类函数的访问修饰权限不能少于父类的; 子类无法重写父类的private方法 子类对象查找属性或方法时的 原则:就近原则。..., 被引用对象的类型 而不是引用变量的类型决定了调用谁的成员方法, 但是这个被调用的方法必须是在超类中定义过的 ,也就是说被调用的方法必须是 被子类重写的方法 。...对于前半句的意思就是:当父类变量引用子类对象时,在调用成员函数时,应该调用向子类的成员函数,但前提是此函数时被子类重写的函数。 A B C D的继承关系如下: ?

    80440

    深入PHP面向对象、模式与实践(一)

    一、PHP:设计与管理 二、PHP与对象 三、对象基础 A.类和对象 1.类是用于生成对象的代码模板 2.对象是根据类中定义的模板所构造的数据,对象可以被说成是类的“实例”,它是由类定义的数据类型 B....设置类中的属性 1.属性也被称为成员变量,用来有些存放对象之间互不相同的数据 2.不建议动态增加属性到对象 C.使用方法 1.方法是在类中声明的特殊函数,类似到函数声明,让对象执行任务 2....子类可以增加父类(也称为超类,superclass)之外 的新功能,因此子类也被称为父类的“扩展” 2.parent::调用父类方法 四、高级特性 A.静态方法和属性 1.通过对象访问方法和属性,这样的方法和属性是...__get()、__set()用于处理类(或其父类)中未声明的属性 3.__isset()当客户在一个未定义的属性上调用isset()时调用,__unset()在一个未定义的属性被调用时调用 4....客户端代码因此可以使用一个公共父类的任意子类而不需要改写代码 4.PHP无法强制规定类方法返回的数据类型,意味着不同的子类方法可能返回不同类型的对象或基本数据类型,可以靠人为的约定来使多个方法保持一致

    1K40

    前端常见20道高频面试题深入解析

    ; node 环境:无论是否在严格模式下,在全局执行环境中(在任何函数体外部),this 都是空对象 {}; 是否是 new 绑定 如果是 new 绑定,并且构造函数中没有返回 function 或者是...在创建子类型的实例时,没有办法在不影响所有对象实例的情况下给超类型的构造函数中传递参数。 2. 借用构造函数 借用构造函数的技术,其基本思想为: 在子类型的构造函数中调用超类型构造函数。...优点: 可以向超类传递参数 解决了原型中包含引用类型值被所有实例共享的问题 缺点: 方法都在构造函数中定义,函数复用无从谈起,另外超类型原型中定义的方法对于子类型而言都是不可见的。 3....缺点: 无论什么情况下,都会调用两次超类型构造函数:一次是在创建子类型原型的时候,另一次是在子类型构造函数内部。 优点: 可以向超类传递参数 每个实例都有自己的属性 实现了函数复用 4....来替换为子类型原型赋值的语句: 优点: 只调用了一次超类构造函数,效率更高。

    1.2K30

    大数据利器--Scala语言学习(基础)

    1) lazy 不能修饰 var 类型的变量 2) 不但是在调用函数时,加了 lazy ,会导致函数的执行被推迟,我们在声明一个变量时,如果给声明了 lazy ,那么变量值得分配也会推迟。...3) 伴生对象中的属性和方法都可以通过伴生对象名直接调用访问 4) 从语法角度来讲,所谓的伴生对象其实就是类的静态方法和静态变量的集合 5) 从技术角度来讲,scala 还是没有生成静态的内容,只不过是将伴生对象生成了一个新的类...具体实现请参考“特质叠加” 第一种特质构造顺序(声明类的同时混入特质) 1) 调用当前类的超类构造器 2) 第一个特质的父特质构造器 3) 第一个特质构造器 4) 第二个特质构造器的父特质构造器,...如果已经执行过,就不再执行 5) 第二个特质构造器 6) …….重复 4,5 的步骤(如果有第 3 个,第 4 个特质) 第 2 种特质构造顺序(在构建对象时,动态混入特质) 1) 调用当前类的超类构造...1) 其所带的 构造参数有且只能有一个 2) 隐式类必须被定义在“类”或“伴生对象”或“包对象”里,即隐式类不能是顶级的(top-level objects) 3) 隐式类不能是 case class

    1K10

    Java基础知识精华部分.

    原因:子类的所有构造函数中的第一行,其实都有一条隐身的语句super(); super(): 表示父类的构造函数,并会调用于参数相对应的父类中的构造函数。...而super():是在调用父类中空参数的构造函数。 为什么子类对象初始化时,都需要调用父类中的函数?(为什么要在子类构造函数的第一行加入这个super()?)...因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的。所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程。...如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数。 问题:super()和this()是否可以同时出现的构造函数中。...反射的基本步骤: 1、获得Class对象,就是获取到指定的名称的字节码文件对象。 2、实例化对象,获得类的属性、方法或构造函数。 3、访问属性、调用方法、调用构造函数创建对象。

    1.1K90

    第一部分 Java面向对象

    目录 第一部分 Java面向对象 1.开发环境搭建及开发工具eclipse使用 2.类和对象 3. 成员变量和局部变量区别 4. 数据类型 5.构造函数 6.函数 7....子类的构造方法中默认有一个 super() ,表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。...this :    代表当前对象的引用(谁调用就代表谁)。 子类的每个构造方法中均有默认的super(),调用父类的空参构造。 手动调用父类构造会覆盖默认的super()。...System类 java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有: public static long currentTimeMillis...例如 import java.util.Date; /* * 注意: * 在使用println方法时,会自动调用Date类中的toString方法。

    43510

    Java基础:继承

    当创建一个类时,总是在继承,因此,除非已明确指出要从其他类中继承,否则就是在隐式地从Java的标准根类Object进行继承。...因此在设计类的时候,应该将通用的方法放到超类中,而将具有特色用途的方法放在子类中,这种将通用的功能放到超类的做法,在面向对象程序设计中十分普遍。...使用 super 调用构造器的语句必须是子类构造器的第一条语句。 3. 继承初始化过程 在继承关系中,子类具有父类相同的行为,当子类调用父类方法时,如何确保父类的实例域是正确初始化的?...:new 一个 LoggingWidget 对象时,在 LoggingWidget 构造函数中会调用 Widget 的 实例构造器,正确的初始化父类的状态变量。...从以上可知:在创建子类对象时,并非在内部也创建一个父类对象,只是调用父类的实例构造器来正确的初始化对应的父类状态。 8.

    57910

    杨校老师课堂之Java面向对象知识点整理集锦

    目录 第一部分 Java面向对象 1.开发环境搭建及开发工具eclipse使用 2.类和对象 3. 成员变量和局部变量区别 4. 数据类型 5.构造函数 6.函数 7....数据类型 Java的数据类型划分为两大类:基础数据类型和引用数据类型 5.构造函数 定义格式: 权限修饰符 构造方法名(参数列表){ // 方法体 } 构造方法的写法上,方法名与它所在的类名相同...子类的构造方法中默认有一个 super() ,表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。...this :    代表当前对象的引用(谁调用就代表谁)。 子类的每个构造方法中均有默认的super(),调用父类的空参构造。 手动调用父类构造会覆盖默认的super()。...抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。 理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。

    45330
    领券