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

如何在子类构造方法中获取父类变量值

在子类构造方法中获取父类变量值,可以通过使用super关键字来实现。super关键字用于调用父类的构造方法、成员变量和成员方法。

在子类的构造方法中,可以使用super()来调用父类的无参构造方法,或者使用super(参数列表)来调用父类的带参构造方法。通过调用父类的构造方法,可以初始化父类的成员变量,然后可以通过子类对象访问这些成员变量。

以下是一个示例代码:

代码语言:txt
复制
class Parent {
    private int value;

    public Parent(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

class Child extends Parent {
    private int childValue;

    public Child(int value, int childValue) {
        super(value); // 调用父类的构造方法初始化父类的成员变量
        this.childValue = childValue;
    }

    public int getChildValue() {
        return childValue;
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child(10, 20);
        System.out.println("父类变量值:" + child.getValue());
        System.out.println("子类变量值:" + child.getChildValue());
    }
}

输出结果为:

代码语言:txt
复制
父类变量值:10
子类变量值:20

在上述示例中,子类Child通过调用super(value)来调用父类Parent的构造方法,将传入的value值赋给父类的成员变量value。然后可以通过子类对象child访问父类的成员变量value和子类的成员变量childValue

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

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

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

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

    6.1K10

    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.1K30

    【C++】继承 ⑥ ( 继承构造函数和析构函数 | 类型兼容性原则 | 指针 指向 子类对象 | 使用 子类对象 为 对象 进行初始化 )

    地方 , 都可以使用 " 公有继承 " 的 派生 ( 子类 ) 对象 替代 , 该 派生 ( 子类 ) 得到了 除 构造函数 和 析构函数 之外的 所有 成员变量 和 成员方法 ; 功能完整性 :..." 应用场景 : 直接使用 : 使用 子类对象 作为 对象 使用 ; 赋值 : 将 子类对象 赋值给 对象 ; 初始化 : 使用 子类对象 为 对象 初始化 ; 指针 : 指针 指向...子类对象 , 指针 值为 子类对象 在 堆内存 的地址 , 也就是 将 子类对象 地址 赋值给 类型指针 ; 引用 : 引用 引用 子类对象 , 将 子类对象 赋值给 类型的引用 ; 二...或 引用 , 此处可以直接传入 子类指针 或 子类引用 ; // 函数接收指针类型 // 此处可以传入子类对象的指针 void fun_pointer(Parent* obj) { obj..."pause"); return 0; } 执行结果 : funParent 函数 子类 funChild 函数 funParent 函数 funParent 函数 funParent

    25620

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

    一、继承机制中派生的 static 关键字 1、子类继承静态成员 子类继承静态成员 : ( 基 ) 使用 static 关键字 定义的 静态成员变量 , 可以被所有的 子类 (...派生 ) 共享 ; 2、静态成员访问控制权限的改变 继承自 的 静态成员变量 , 仍然遵循 继承 子类的 访问控制特性 , public 公有继承 : 成员 在 子类 , 访问控制权限...不变 , 共有 和 保护成员 可以在子类访问 , 私有成员不可在子类访问 ; 的 public 成员 仍然是 public 成员 ; 的 protected 成员 仍然是 protected...和 保护成员 可以在子类访问 , 私有成员不可在子类访问 ; 的 public 成员 变为 子类的 protected 成员 ; 的 protected 成员 仍然是 protected...都不可在子类访问 ; 的 public 成员 变为 子类的 private 成员 ; 的 protected 成员 变为 子类的 private 成员 ; 的 private

    40810

    关于Java构造函数(Constructor)的常见问题总结1 为什么调用子类构造方法的时候,默认会调用构造方法2 常见错误:Implicit super constructor is und

    1 为什么调用子类构造方法的时候,默认会调用构造方法 看下面这个简单的例子: package cc; public class Sub extends Super { public Sub...** 之所以要调用构造方法,是因为super可能需要构造函数来初始化一些私有的成员变量。...上一小节,我们知道,如果子类构造函数,没有显示的调用构造函数,那么,编译器就会插入super(),也就是自动调用无参的构造函数。但是此时,没有无参的构造函数,所以就会报错了。...解决这个问题很简单,我们可以给插入一个无参的构造函数,或者在子类构造函数显示的调用的有参构造函数。 在子类构造函数显示的调用构造函数 下面的代码是正确的。 ?...Paste_Image.png 构造函数的使用规则 简单的说,在使用的时候,子类构造函数必须调用构造函数,不管有没有显示的声明。所以,被调用的构造函数,一定在定义好!

    2.8K41

    ASP.NET AJAX(6)__Microsoft AJAX Library的面向对象类型系统命名空间——构造函数——定义方法——定义属性——注册——抽象——继承——调用

    定义构造函数 定义成员(方法、属性、事件) 注册 ——构造函数 构造函数即为function定义 通常用于初始化域变量 自由成员使用下划线开头(形式上的封装) ——定义方法 使用prototype..._mymethod=function{throw Error.notImplemented();}}//包含抽象方法 ——继承 调用构造函数 有必须调用构造函数,否则会丢失继承效果...可以直接以普通方式实现的抽象成员 toString方法无法被继承 ——调用方法 MyNamespace.MyClass.prototype={myMethod:function(param1...= function(name) { MyNamespace.Intern.initializeBase(this, [name]);//调用构造函数 } MyNamespace.Intern.prototype...接口 与的定义方法大致相同 构造函数抛出异常 所有的方法抛出异常(只有方法签名,不提供实现) 注册接口时使用registerInterface方法 接口无法继承其他接口 接口定义 MyNamespace.IMyInterface

    6.2K50

    Java不可变机制

    JDK内部自带的很多不可变:Interger、Long和String等。 ...可变(Mutable Class):相对于不可变,可变创建实例后可以改变其成员变量值,开发创建的大部分类都属于可变。  不可变的特性对JAVA来说带来怎样的好处? ...2)易于构造、使用和测试。  不可变的设计原则  如何在Java写出Immutable的?...5)应该是final的,保证不被继承,如果类可以被继承会破坏的不可变性机制,只要继承覆盖方法并且继承可以改变成员变量值,那么一旦子类的形式出现时,不能保证当前是否可变。 ...6)如果类包含mutable对象,那么返回给客户端的时候,返回该对象的一个深拷贝,而不是该对象本身(该条可以归为第一条的一个特例)  如果将构造器传入的对象直接赋值给成员变量,还是可以通过对传入对象的修改进而导致改变内部变量的值

    92920

    Java50个关键字总结

    但是不能实例化,只能被子类继承。 如果子类不是抽象,则必须重写的抽象方法。 ...枚举可以有成员变量和方法。  17.extends  extends表示继承。例如:  class 子类 extends{} Java的继承是单继承,即子类只能有一个直接。...除了private,子类可以访问方法和成员变量。  18.final  修饰变量: 将变量变为常量,在初始化变量后不能再改变值。修饰方法: 被final修饰的方法不能被子类重写。...40.super  super即超  引用的的成员:  super.xxx 变量或方法重名时用super调用的成员或方法。...调用构造方法:  super(xxx); 41.switch  switch用于分支结构,判断某个变量与一系列值是否相等。

    62400

    Java50个关键字总结

    但是不能实例化,只能被子类继承。 如果子类不是抽象,则必须重写的抽象方法。 ...枚举可以有成员变量和方法。  17.extends  extends表示继承。例如:  class 子类 extends{} Java的继承是单继承,即子类只能有一个直接。...除了private,子类可以访问方法和成员变量。  18.final  修饰变量: 将变量变为常量,在初始化变量后不能再改变值。修饰方法: 被final修饰的方法不能被子类重写。...40.super  super即超  引用的的成员:  super.xxx 变量或方法重名时用super调用的成员或方法。...调用构造方法:  super(xxx); 41.switch  switch用于分支结构,判断某个变量与一系列值是否相等。

    58400

    Java50个关键字总结「建议收藏」

    作业一:Java基础知识复习 一、关键字总结 1.abstract 修饰: abstract修饰,这个就是抽象,抽象可以有非抽象变量和成员变量,也可以有普通方法构造方法。...但是不能实例化,只能被子类继承。 如果子类不是抽象,则必须重写的抽象方法。...枚举可以有成员变量和方法。 17.extends extends表示继承。例如: class 子类 extends{ } Java的继承是单继承,即子类只能有一个直接。...除了private,子类可以访问方法和成员变量。 18.final 修饰变量: 将变量变为常量,在初始化变量后不能再改变值。 修饰方法: 被final修饰的方法不能被子类重写。...调用构造方法: super(xxx); 41.switch switch用于分支结构,判断某个变量与一系列值是否相等。

    1K30

    Java50个关键字总结

    但是不能实例化,只能被子类继承。 如果子类不是抽象,则必须重写的抽象方法。 ...枚举可以有成员变量和方法。  17.extends  extends表示继承。例如:  class 子类 extends{} Java的继承是单继承,即子类只能有一个直接。...除了private,子类可以访问方法和成员变量。  18.final  修饰变量: 将变量变为常量,在初始化变量后不能再改变值。修饰方法: 被final修饰的方法不能被子类重写。...40.super  super即超  引用的的成员:  super.xxx 变量或方法重名时用super调用的成员或方法。...调用构造方法:  super(xxx); 41.switch  switch用于分支结构,判断某个变量与一系列值是否相等。

    58400

    Python小知识点(5)--面向对象部分

    名.变量==值】、 结论为:若实例已有新增的与变量同名的则变量值为实例变量值,否则则是修改后的变量值,这是由于访问顺序是默认先访问实例的,若实例没有则来访问的。...实现继承是指使用基的属性和方法而无需额外编码的能力。 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构方法)。  ...这样子类就不能继承的属性了。所以我们在定义子类构造函数时,要先继承再构造,这样我们也能获取的属性了。...子类构造函数基础构造函数过程如下:       实例化对象c ----> c 调用子类__init__()  ---- > 子类__init__()继承__init__()  ----- > 调用... __init__()  8.1.3 对方法的继承  如果我们对基/方法需要修改,可以在子类重构该方法

    49840

    Java基础题

    问题:比如静态数据,构造函数,字段,子类静态数据,构造函数,字 段,当new的时候,他们的执行顺序。 答案:加载器实例化时进行的操作步骤(加载–>连接->初始化)。...静态变量、 静态代码块、 子类静态变量、 子类静态代码块、 非静态变量(实例成员变量)、 构造函数、 子类非静态变量(子类实例成员变量)、 子类构造函数。...5、抽象里的抽象方法必须全部被子类所实现,如果子类不能全部实现抽象方法,那么该子类只能是抽象。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象。...https://www.cnblogs.com/ngy0217/p/9006716.html 18、如何在子类自动完成所有的hashcode和equals实现?这么做有何优劣。...被其修饰的、属性以及方法只能被本身的方法子类访问,即使子类在不同的包也可以访问。 default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。

    1K10

    当前对象与对象(thissuper)

    子类的成员变量或方法的成员变量或方法同名 class Country { String name; void value() { name = "China"...super(参数):调用的某一个构造函数(应该为构造函数的第一条语句)。...class Chinese extends Persones { Chinese() { super(); // 调用构造方法(1) prt("子类·调用...(2) prt("子类·调用”含一个参数的构造方法“: "+"his name is " + name); } Chinese(String name, int age...(用来访问直接中被隐藏的成员数据或函数),基与派生中有相同成员定义时: super.成员(成员变量、成员方法) this:它代表当前对象名(在程序易产生不同意义,应使用this来指明当前对象

    52910

    序列化与反序列化——作为Java开发,应该避开这些坑

    ,原来是因为没有序列化的时候,Object newWorker = ois.readObject()需要直接调用的无参数构造方法,不经过子类的无参构造方法。...我们在People中加上空的构造方法之后再次执行   结果却发现打印的不是Worker,而是People,因为子类没有实现toString而调用的toString,所以打印了People对象...因此当我们取对象的变量值时,它的值是调用无参构造函数后的值,如果在无参构造函数没有对变量赋值,那么成员变量值都是默认值,这里的Long型就是null。   ...根据以上特性,我们可以将不需要被序列化的字段抽取出来放到子类实现 Serializable接口,不实现Serializable接口但提供一个空构造方法,则的字段数据将不被序列化。...这种情况一定要提供空构造方法,不要忘了子类的toString方法! ---- 3.存在引用对象,这个对象在什么情况下可以实现序列化?

    35510

    Java核心基础知识:面向对象的三大特性讲义

    就去查找, 有就使用, 没有就报错. 7.9 方法重写 7.9.1 概述 子类中出现和一模一样的方法时, 称为方法重写....方法重写要求返回值的数据类型也必须一样. 7.9.2 应用场景 当子类需要使用的功能, 而功能主体又有自己独有需求的时候, 就可以考虑重写方法了, 这样, 即沿袭了的功能, 又定义了子类特有的内容...参考代码 略. 7.9.4 注意事项 子类重写方法时, 方法声明上要用@Override注解来修饰. 私有的方法不能被重写....抽象子类: 如果是普通, 则必须重写抽象中所有的抽象方法. 如果是抽象, 则可以不用重写抽象的抽象方法....答: 用于子类对象访问数据前, 对数据进行初始化. 需求 定义抽象Person, 在定义变量age, 常量country, 空参, 全参构造.

    44110

    Serializable是什么

    序列化的继承问题当一个实现序列化,子类自动实现序列化,不需要显式实现Serializable接口。...一个子类实现了 Serializable 接口,它的都没有实现 Serializable 接口,要想将对象也序列化,就需要让也实现Serializable 接口。...第二种情况:如果不实现 Serializable接口的话,就需要有默认的无参的构造函数。这是因为一个 Java 对象的构造必须先有对象,才有子对象,反序列化也不例外。...在反序列化时,为了构造对象,只能调用的无参构造函数作为默认的对象。因此当我们取对象的变量值时,它的值是调用无参构造函数后的值。...在这种情况下,在序列化时根据需要在无参构造函数对变量进行初始化,否则的话,变量值都是默认声明的值, int 型的默认是 0,string 型的默认是 null。

    8010
    领券