首页
学习
活动
专区
工具
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.2K10

    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

    父类和子类对象的获取值的方式验证,通过父类属性的方式获取不到值,需要使用get方法

    父类和子类对象的获取值的方式验证,通过父类属性的方式获取不到值,需要使用get方法 静态属性通过类.属性的方式获取,对象获取使用get方法获取 package com.example.core.mydemo.java...String channelName) { this.channelName = channelName; } /** * partnerName: //通过父类属性的方式获取不到值...,需要使用get方法 * channelName: //通过父类属性的方式获取不到值,需要使用get方法 * partnerName2:合作商名称 * channelName2...{ this.channelName = channelName; } /** * partnerName3:合作商名称 //对象自身的属性值可以获取...* MAX=100 静态属性通过类.属性的方式获取,对象获取使用get方法获取 * @param args */ public static void main(String

    9910

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

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

    30920

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

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

    54910

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

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

    3K41

    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类对象,那么返回给客户端的时候,返回该对象的一个深拷贝,而不是该对象本身(该条可以归为第一条中的一个特例)  如果将构造器传入的对象直接赋值给成员变量,还是可以通过对传入对象的修改进而导致改变内部变量的值

    95920

    Java50个关键字总结

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

    63500

    Java50个关键字总结

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

    59200

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

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

    1.1K30

    Java50个关键字总结

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

    58900

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

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

    51340

    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来指明当前对象

    54410

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

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

    39610

    Serializable是什么

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

    10210
    领券