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

Java】继承、super、final、子类构造方法

子类方法中,访问父类的成员变量和方法。 6.子类构造方法 先有父再有子,即:子类对象构造时,需要先调用父类构造方法,然后再执行子类构造方法。...【相同点】: 都是Java关键字。 只能在类的非静态方法中使用,用来访问非静态成员方法和字段。 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在。...当有对象创建时,才会执行示例代码块,示例代码块执行完成,最后构造方法执行。...1.修饰变量或字段:表示常量(即不能修改) final int a = 10; a = 20; //编译出错 2.修饰类:表示此类不能继承 如果需要控制继承,此时这个类可以final修饰,意味着当前类不可以继承...中进行继承 我们平时用的String字符串类,就是用final修饰的,不能继承。

12710

Java探索之旅】super 子类构造 掌握

Java中,通过继承可以实现子类对父类的属性和方法的继承,同时也引入了一些特殊关键字和规则,如super关键字和构造方法的调用顺序。...本文将深入探讨super关键字的用法、子类构造方法与父类构造方法的关系,以及super与this关键字的区别,帮助您更好地理解和应用继承在Java中的实现方式。...一、继承 1.1 super 继承中有些情况下由于设计不好,或者因场景需要,子类和父类中可能会存在相同名称的成员,如果要在子类方法中访问父类同名成员时,由于子类是无法直接访问的,就需要用到Java提供的...子类方法中,访问父类的成员变量和方法。 1.2 子类构造方法 子类对象构造时,需要先调用父类构造方法,然后执行子类构造方法,所谓父子,先有父后有子。...1.3 super与this的区别 【相同点】 都是Java中的关键字 只能在类的非静态方法中使用,用来访问非静态成员方法和字段 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在 【不同点

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

    Java子类和父类的构造函数?

    参考链接: Java中的继承和构造函数 这篇文章总结了关于Java构造的常见​​问题。  1)为什么创建一个子类对象要也需要调用父类的构造函数? ...,父类中的构造函数(super())首先调用。...让父类中的构造调用的原因是,如果父类有私有的属性需要在它的构造函数中初始化。 ...由于编译器试图插入super()这条语句到子类的两个构造函数中,但Super的默认构造函数没有定义,所以编译器会报该错误消息。 ...4)规则 简而言之,规则是:子类构造函数必须调用父类中的构造函数,无论隐式调用还是显式调用,无论哪种方式,调用的构造函数必须得先定义。

    2.2K20

    构造函数调用子类的方法,写过吗?

    为什么Base的构造函数与虚构函数即使调用虚函数,也是调自己的函数呢?这跟构造函数与虚构函数的调用顺序有关。子类对象构造的时候,先调父类构造函数初始化父类,再调子类构造函数初始化子类。...子类对象虚构的时候,恰恰相反,先调子类对象的虚构函数,再调父类的虚构函数。输出的结果也证明了这点。 所以如果父类的构造函数与虚构函数是调用子类的函数,那就非常危险了。...因为父类的构造函数执行时,子类构造函数还没有执行,说明子类还没有初始化,而这时就调用子类的方法,很容易出错,甚至崩溃。...父类的虚构函数执行的时候,子类的虚构函数已经执行完毕,说明子类的资源已经释放,而这时继续执行子类的方法,也很容易崩溃。于是,C++规范为此作了此约束。...如果真的很想在构造函数内调用子类方法进行初始化,还是显示提供一个初始化函数,让子类对象实例化完,显示调用初始化函数。

    1.4K20

    java之父类中的构造器是否能被子类继承?

    子类默认继承父类的属性和方法,但不会继承父类的构造器,而是在子类实例化时会默认调用父类的空构造器。子类在创建的时候会调用自己的空构造器,并在空构造器会隐式调用super(),即父类的空构造器。...如果父类的构造重载,那么子类中的构造器也必须初始化父类的构造器,否则会报编译错误。当然,只要父类中显示定义了空构造器,子类中就不必初始化父类的构造器。...例如: 父类Person.java package myjava; public class Person { private String name; private int age...:Student.java package myjava; public class Student extends Person{ //这里必须初始化父类重载构造方法,否则会报错...,只有一个重载了的构造器,在子类构造器中,必须初始化父类的构造器,即super关键字+父类构造器中的参数。

    1.2K20

    【Kotlin】Kotlin 类的继承 一 ( 类继承基本方式 | final 关键字 | 子类构造函数 | 子类构造函数 )

    class 子类 : 父类 { //子类函数体 override fun 重写的父类方法名 ( 重写的父类方法参数 ){ //要执行的函数内容 } } 1 ....类继承限制 : 子类使用 : 父类 ( 父类构造函数参数列表 ) ① 类继承限制 : 只有 open 修饰的类 , 才能有子类继承该类 , 普通的类不允许继承 ; ② 类方法重写限制 : 只有...子类有主构造函数 : 父类必须在主构造函数中初始化 , 子类的 constructor() 可以省略 ; " : " 的 Father() 相当于调用了父类的主构造函数 , 将子类的主构造函数委托给父类的主构造函数执行...父类构造函数与子类构造函数总结 ---- 子类构造函数最终委托 : 子类构造函数归根到底都要委托给父类的主构造函数 ; ① 子类构造函数 : 假如子类有主构造函数 , 该主构造函数肯定要委托父类的主构造函数执行...; ② 子类构造函数 : 此时子类的次构造函数都要委托子类的主构造函数执行 , 相当于间接委托父类主构造函数执行 ;

    1.3K10

    java 构造构造方法_Java构造器(构造方法constructor)

    我们先来看一下什么是构造器: 1、构造器也叫构造方法或构造函数,分为有参构造器和无参构造器; 2、构造器也是一种方法,只不过是一种特殊的方法,它会在对象创建的时候调用; 3、构造器最大的作用就是在创建对象的时候进行对象的初始化...,有参构造器可以实现对象传参(后面会比较着来看有参构造器方便在哪儿了); 4、一个类可以有零个(如果没有自己定义编译器会帮你提供无参构造器)或多个构造器(【重载】不知道重载定义的小伙伴可以先记下概念);...5、构造器不能被子类继承,Java子类会自动调用父类的构造器(同样,不了解的可以先记下概念或者跳过) 前面既然说了构造器是一种特殊的方法,我们就来看一下构造方法和普通方法的区别: 1、命名:构造器的方法名必须和类名相同...2、修饰符:构造器不能static、final、synchronized、abstract和native修饰 3、返回值:构造器没有返回值(但是不需要写void),一般方法要有返回值或者无返回值(void...) 来看一下无参构造器的代码,同时看一下无参构造器的情况下(不定义构造器同理)是如何给属性赋值的: 1 package test; public class Student01 { //定义属性 public

    1.1K10

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

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

    6.2K10

    java父类引用指向子类对象好处_java子类调用父类属性

    ,为了规避风险,Java只允许单继承,势必在功能上有很大的限制,所以,Java引入多态性的概念以弥补这点不足,此外,抽象类和接口也是解决单继承规定限制的重要手段.同时,多态也是面向对象编程的精髓所在....,否则子类必须abstract修饰符修饰,当然也就不能实例化了 重写父类方法: //父类 public class Father{ //父类有一个打孩子方法 public void hitChild...重载的func1(int i)和func1()不再是同一个方法,由于父类中没有func1(int i),那么,父类类型的引用child就不能调用func1(int i)方法。...,将会调用子类中 的这个方法;(动态连接、动态调用) 四、变量不能重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父 类中的变量,那么在编译时会报错。...Son s = new Son();//系统将分配1.5M内存 因为子类中有一个隐藏的引用super会指向父类实例,所以在实例 化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数

    1.2K20

    Java构造函数

    构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用。 Java构造方法的特点如下: 构造方法名必须与类名相同。...Tips:如果在类中添加了带参的构造函数,系统就不会在自动生成无参的构造函数,所以建议添加带参数的构造函数,再手动添加一个默认无参的构造函数。...构造方法封装 构造方法也可以进行封装,访问级别与普通方法一样,构造方法的访问级别参考[ Java学习基础 ] Java的封装性与访问控制中图所示。...代码第29行是保护级别的构造方法,该构造方法在同一包中与默认级别相同,在不同包中可以被子类继承。...所以执行顺序为:父类静态代码 -> 子类静态代码块 -> 父类构造代码块 -> 父类构造函数 -> 子类构造代码块 -> 子类构造函数

    1.3K60

    子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?

    (1)子类A继承父类B, A a = new A(); 则: 父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类构造函数 (2)若子类构造函数中显式的调用了父类的某构造函数..."B"); } public static void main(String[] args) { new Test(); } } CBB 首先new了一个子类对象...,那么就要调用构造方法来初始化该子类对象,但是该类继承自A,所以要先调用父类的构造方法,这里通过super(“B”)显示的调用了父类的带参构造。...执行父类的带参构造前要先对父类中的对象进行初始化,对父类中的c成员进行初始化,调用了C类的无参构造,所以调用顺序为: 先调用C类的无参构造 再调用A类的带参构造 最后调用调用子类构造 (3...顺序为:父类的静态变量, 父类的静态代码块 ,子类的静态变量,子类的静态代码块。

    2.1K30
    领券