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

如何在不改变父类变量本身的情况下改变在子类的父类中定义的变量?

在不改变父类变量本身的情况下改变在子类的父类中定义的变量,可以通过以下步骤实现:

  1. 在子类中创建一个同名的变量,覆盖父类中的变量。这样子类就可以使用自己的变量而不改变父类的变量。
  2. 如果需要在子类中使用父类的变量值,可以通过调用父类的方法来获取。在子类中可以使用super关键字来调用父类的方法,通过这个方法获取父类的变量值。

下面是一个示例代码:

代码语言:java
复制
class ParentClass {
    protected int variable;

    public ParentClass(int variable) {
        this.variable = variable;
    }

    public int getVariable() {
        return variable;
    }
}

class ChildClass extends ParentClass {
    private int variable;

    public ChildClass(int parentVariable, int childVariable) {
        super(parentVariable);
        this.variable = childVariable;
    }

    public int getChildVariable() {
        return variable;
    }

    public int getParentVariable() {
        return super.getVariable();
    }
}

public class Main {
    public static void main(String[] args) {
        ParentClass parent = new ParentClass(10);
        ChildClass child = new ChildClass(20, 30);

        System.out.println("Parent Variable: " + parent.getVariable());
        System.out.println("Child Variable: " + child.getChildVariable());
        System.out.println("Parent Variable in Child: " + child.getParentVariable());
    }
}

输出结果为:

代码语言:txt
复制
Parent Variable: 10
Child Variable: 30
Parent Variable in Child: 20

在这个示例中,父类ParentClass定义了一个变量variable,并提供了获取变量值的方法getVariable()。子类ChildClass中也定义了一个同名的变量variable,并通过调用父类的构造方法super(parentVariable)来初始化父类的变量。子类还提供了获取子类变量值的方法getChildVariable()和获取父类变量值的方法getParentVariable(),在getParentVariable()方法中使用了super关键字来调用父类的getVariable()方法。

通过这种方式,我们可以在不改变父类变量本身的情况下,在子类中定义并使用自己的变量。

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

相关·内容

继承与隐藏:Java成员变量神秘禁忌

摘要 在Java子类继承了成员变量,但不能直接覆盖(或称为隐藏)成员变量。...本文将解释为什么Java设计了这样规则,探讨与此相关继承和多态概念,并说明如何在子类访问和使用成员变量。 1....本文将探讨这个设计决策原因,以及如何在子类中正确使用成员变量。 2. 成员变量继承和隐藏 在Java,继承是一种允许子类获取类属性和方法机制。...} } 在上面的例子,我们定义了一个Vehicle和两个子类Car和Motorcycle,它们都重写了makeSound方法。...通过多态,我们可以在引用层面上编写通用代码,而在运行时根据实际对象类型来调用适当方法。这提高了代码灵活性和可复用性,并使得我们可以在不修改通用代码情况下扩展和改变程序行为。 4.

56720

Java super继承

所以,子类初始化之前,一定要先完成数据初始化每一个构造方法第一条语句默认都是:super() 继承构造方法关系  如果没有构造方法  子类通过super去显示调用其他带参构造方法子类通过...使用特点: 如果方法名不同,就调用对应方法  如果方法名相同,最终使用子类自己  方法重写应用:  当子类需要功能,而功能主体子类有自己特有内容时,可以重写方法,这样,即沿袭了功能...方法重写注意:  私有方法不能被重写子类重写方法时,访问权限不能更低静态方法,子类也必须通过静态方法进行重写。...修饰不能被继承修饰变量变量就变成了常量,只能被赋值一次修饰方法,方法不能被重写 final修饰局部变量  在方法内部,该变量不可以被改变在方法声明上,分别演示基本类型和引用类型作为参数情况 基本类型...第一个原因是把方法锁定,以防任何继承修改它含义;第二个原因是效率。  总结:把多个相同成员给提取出来定义到一个独立

53630
  • java 多态

    1.概述 1.多态概述 所谓多态就是指程序定义引用变量所指向具体类型和通过该引用变量发出方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个实例对象,该引用变量发出方法调用到底是哪个实现方法...3.多态定义与使用格式 定义格式:类型 变量名=new 子类类型(); 2.多态成员特点 1.多态成员变量:编译运行看左边 Fu f=new Zi(); System.out.println...3.多态转型 多态转型分为向上转型和向下转型两种: 向上转型:多态本身就是向上转型过过程 使用格式:类型 变量名=new 子类类型(); 适用场景:当不需要面对子类类型时...5.多态情况下,子存在同名成员变量或成员方法优先调用问题 1.多态情况下,子存在同名成员变量时,默认访问成员变量数据. 2.多态情况下,子存在同名非静态函数时候,默认是调用子类成员函数...,类型指针,那么对象体存放是对象成员变量,成员变量包括从父继承过成员变量和本类成员变量,那么如果子类有重名变量,那么这个时候就要看对象静态类型是什么了,静态类型就是声明类型,如果声明类型是那么就直接选取成员变量

    48910

    Python面向对象

    名.成员变量 只跟有关,不可改变 应用场景: 比如定义一个狗叫做ClassA: 里面有成员变量 动物种类、狗品种、狗毛色 有构造函数...) # 打印 0 表示子类继承了变量 print(s.name) # 打印 Tom 表示子类继承了实例变量 print(s.age) # 打印...13 表示子类继承了实例变量 s.get_name() # 打印 Tom 表示子类继承了实例方法 注意: 上述只是将Human变量和方法提取到了子类...现在对于上述代码,如果改变,那么代码涉及地方全都要,违反了开闭原则 引出:super() 通用调用方法,修改为: super(Student,self...__init__(name,age) 注意: 这样修改时不需要修改这里代码 super()目的是继承同名方法,__init__()或一些公共方法

    45140

    super关键字和继承潜规则

    this调用自己构造器,而super可以调用构造器。 super除了调用被子类重写后被隐藏成员变量和方法,还有一个重要作用就是调用构造器。...在创建子类对象时候,并没有创建对象,但是由于子类继承了,内存不但会划分子类变量空间,也会将子类所有成员变量也划分内存空间,所以可以使用super去访问他们。...因为定义private时候,无论是变量还是方法,子类都是不可见。所以当我们有个方法是专门给子类去重写而又不希望被其他发现时候,我们可以定义为protected方法。...还有种情况是我们希望子类重写。比如我们普通玩家打怪时候,一不小心怪没打死,自己挂了。这时候会有系统惩罚,比如掉经验掉金币,就算用户是VIP,我也希望他们改变这个机制,为什么?...加在变量前面,这个变量就变成常量了,不能再赋值了,加在方法前面,子类统统不能。 阻止重写 我们在开发软件过程,会是一个多人配合团体合作过程。

    50430

    疯狂Java笔记之对象及其内存管理

    java.PNG 2访问子类对象实例变量 子类因为继承所以可以访问成员方法和变量,当一般情况下是访问不了子类,因为不知道哪个子类继承。...也就是说,当系统创建一个Java对象时,如果该Java有两个(一个直接A,一个间接g ),假设A定义了2个实例变量,B 定义了3个实例变量,当前定义了2个实例变量,那么这个Java...如果子类定义了与已有变量同名变量,那么子类定义变量会隐藏定义变量,而不是覆盖。因此系统创建子类对象是依然会为定义,被隐藏变量分配内存空间。...为了在子类访问定义,被隐藏变量和方法,可以使用super来限定修饰这些变量和方法。...3.子类变量 如果在子类要访问中被隐藏静态变量和方法,程序有两种方式: 直接使用名作为主调来访问变量 使用super.作为限定来访问变量 一般情况下,都建议使用第一种方式访问变量

    41730

    UIview

    Overview 在运行时,一个视图对象处理任何内容呈现它面积,还处理任何与内容交互。UIView本身提供了基本行为与背景颜色填充矩形区域。...这将创建一个视图之间亲子关系被嵌入(称为子视图)和嵌入视图(称为视图)。通常情况下,子视图可见区域范围剪它视图,但在iOS可以使用clipsToBounds属性来改变行为。...框架定义了视图起源和维度坐标系统中常用它视图和布局调整视图大小或位置。中心属性可以用来调整视图位置不改变大小。边界定义视图,把他们内部维度和几乎完全用于自定义代码。...Animations 几个视图属性可以更改该对象animated,改变属性创建一个动画,这种改变在很短时间内传达给用户。...因此,你应该叫UIView方法从代码运行您应用程序主线程。这可能不是严格必需是唯一一次在创建视图对象本身,而是所有其他操作应该发生在主线程。

    71010

    谈谈你对多态了解以及应用

    Java多态代码体现在一个子类对象(实现对象)既可以给这个子类(实现对象)引用变量赋值,又可以给这个子类(实现对象)(接口)变量赋值。 Student可以为Person子类。...1.2 多态定义与使用格式 多态定义格式:就是引用变量指向子类对象 类型 变量名 = new 子类类型(); 变量名.方法名(); 普通多态定义格式...多态成员变量 多态出现后会导致子成员变量有微弱变化。看如下代码 子类都有同名变量: ? 没有的情况下: ? 子类没有的情况下: ?...简单记:编译和运行都参考等号左边。编译运行看左边。 多态成员方法 多态出现后会导致子成员方法有微弱变化。看如下代码 子类都有同名方法: ? 没有的情况下: ?...子类没有的情况下: ? 当子中出现同名成员方法时,多态调用该变量时: 编译时期:参考引用变量所属,如果类没有调用方法,编译失败。

    42920

    JAVA 什么是多态?

    大家好,又见面了,我是你们朋友全栈君。 面向对象编程有三大特性:封装、继承、多态。 封装隐藏了内部实现机制,可以在不影响使用情况下改变内部结构,同时也保护了数据。...通俗一点说法:所谓多态就是指程序定义引用变量所指向具体类型和通过该引用变量发出方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个实例对象,该引用变量发出方法调用到底是哪个实现方法...方法重写应用: 当子类需要功能,而功能主体子类有自己特有内容时,可以重写方法。即沿用了功能,又定义子类特有的内容。...,即静态只能覆盖静态 子类重写方法时,最好声明得一模一样 如果子类定义了一个与private方法具有相同方法名、相同形参列表、相同返回值类型方法,依然不是重写,只是在子类重新定义了一个新方法...子类对象调用方法时,先找子类本身方法,再找方法。

    89830

    Java学习之抽象与接口

    由于java不支持多继承,子类不能继承多个,但可以实现多个接口。 若基本功能在不再改变,那么就需要使用抽象。若不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口。...2.抽象不能用来创建对象。 3.若一个继承于一个抽象,则子类必须实现抽象方法。如果子类没有实现抽象方法,则必须将子类定义为abstract。...5,接口(interface) 在软件工程,接口泛指供别人调用方法或函数 定义形式:[public] interface InterfaceName{} 接口中可以含有变量和方法。...可以看出接口是一种极度抽象类型,它比抽象更加”抽象”,并且一般情况下不在接口中定义变量。...抽象是对整个整体进行抽象,包括属性,行为。接口是对局部(行为)进行抽象。 抽象作为很多子类,是一种模板式设计。接口是一种行为规范。

    46120

    精读《设计模式 - Template Method 模版模式》

    意图:定义一个操作算法骨架,而将一些步骤延迟到子类。TemplateMethod 使得子类可以不改变一个算法结构即可重定义该算法某些特定步骤。...意图解释 意图:定义一个操作算法骨架,而将一些步骤延迟到子类。TemplateMethod 使得子类可以不改变一个算法结构即可重定义该算法某些特定步骤。...这个设计模式初衷是用于面向对象,所以考虑是如何在运用模版模式。首先定义一个,实现了一些算法,再将需要被子类重载方法提出来,子类重载这些部分方法后,即可利用实现好算法做一些功能。...比如说方法 function a() { b() + c() },此时子类只需要重定义 b 与 c 方法,即可复用 a 算法(b 与 c 相加)。...弊端 模版模式用在,本质上是固定不可变结构,进一步缩小重写方法范围,重写范围越小,代码可复用度就越高,所以一定要在具有通用算法可提取情况下使用,而不要为了节省代码行数而过度使用。

    51520

    Android 设计模式Template Method模式

    定义模板方法模式:定义算法骨架方法,虽然某些步骤推迟到子类,下模板方法允许子类不能改变在情况下,该算法结构。算法重新定义某些步骤。 设计原则:不要给我们打电话。我会打电话给你。...他们冲泡方法 第一步:都是要用沸水 第二步:用热水泡咖啡或茶 第三步:把饮料倒进杯子 第四步:在饮料中增加适当调料 在上面的步骤中一、三是一样,能够抽取出来放在基,二、四不一样,能够抽象出来,...让子类去实现,下面是饮料抽象能够让未知子类去做它本身可能完毕不好或者根本完毕不了事情。...它们在尤为重要,它们提取了公共行为。 2、模板方法导致一种方向控制结构,”好莱坞法则”:”Don’t call me,i will call you.”,即一个调用子类操作。...3、模板调用操作类型有详细操作,详细AbstracClass操作,原语操作。工厂方法,钩子操作。少定义原语操作。 4、模板方法使用继承来改变算法一部分。策略模式使用托付来改变整个算法。

    24730

    【Java基础】封装、继承、多态

    继承 继承是指在一个现有基础上构建一个新,构建出来被称作子类,现有称作子类会自动拥有“可以”继承属性和方法。在子类,可以直接调用成员变量及方法。...成员变量和成员方法继承关系 不同名成员变量或成员方法,子类直接继承使用; 同名变量或方法,默认访问子类自己成员变量或方法,想访问 可以使用super关键字,:super.成员变量。...抽象在使用时要定义子类继承抽象,将抽象进行重写,创建子类对象。其子类只有重写了抽象所有方法后,才能创建对象,否则该子类还是一个抽象。...static final 修饰,说明是不可改变,public static final 也可省略; 接口定义就是常量,接口中常量必须进行赋值,赋值会报错; 接口中常量名称,使用完全大写字母...代码多态性,就是引用指向子类对象,其使用方法如下: 名称 对象名 = new 子类名称(); 接口名称 对象名 = new 实现名称(); 多态情况下,访问成员变量也有所不同:一种是直接通过对象名称访问成员变量

    30410

    java核心技术基础知识整理

    ,不再查找子类本身属性; 方法:super方法直接在子类之中查找指定方法,不再查找子类本身方法; 构造:必须放在构造方法首行,不能与this关键字同时出现。...3、只要包含一个抽象方法,该类必须要定义成抽象,不管是否还包含有其他方法。 4、抽象可以包含具体方法,当然也可以包含抽象方法。 5、子类抽象方法不能与抽象方法同名。...(先初始化成员变量,后加载构造函数原因是,构造函数可能要用到这些成员变量静态块——子类静态块——块——构造器——子类块——子类构造器 最终版本:静态域——静态块——子类静态域...52、Java程序初始化顺序 (1)遵循3个原则: 1)静态对象(变量)优先于非静态对象(变量)初始化; 2)优先于子类进行初始化; 3)按照成员变量定义顺序进行初始化, (2)初始化顺序 静态变量...、静态代码块、子类静态变量子类静态代码块、非静态变量非静态代码块、构造函数、子类非静态变量子类非静态代码块、子类构造函数 53、Java变量类型 (1)变量类型 静态变量、成员变量

    85020

    Java 回顾 ( Revisiting Java )

    换一种说法,多态即允许将子类对象引用赋值给对象引用,赋值之后,对象就可以根据当前赋值给它子对象特性以不同方式运作。...这样一些情况我们可以定义抽象,它不能被初始化,只能被继承。。抽象可以定义抽象方法,抽象方法只存在于抽象,一个只要有一个抽象方法,那他必是抽象。...super()调用构造函数,this是对对象本身引用 谈谈实例变量,实例变量即对象成员变量。...一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量子类可见; 8)实例变量具有默认值。数值型变量默认值是0,布尔型变量默认值是false,引用类型变量默认值是null。...静态变量定义,它属于,不属于任何对象,但对象可以获得它。 静态变量由(该类)所有对象所共享。 静态方法通过名调用,静态变量通过名存取 。

    1.6K20

    【JAVA零基础入门系列】Day13 Java继承与多态

    (滑稽)   开个玩笑,这里继承跟我们现实生活中继承还是有很大区别的,一个可以继承另一个,继承内容包括属性跟方法,被继承被称为或者基,继承称为子类或者导出,在子类可以调用方法和变量...Employee(雇员),并定义了一些简单成员变量以及方法,接下来定义一个Manager(经理)来继承这个。...1.子类可以继承成员变量   当子类继承了某个之后,便可以使用成员变量,但是并不是完全继承所有成员变量。...如果要在子类访问同名成员变量,需要使用super关键字来进行引用。   2.子类继承方法   同样地,子类也并不是完全继承所有方法。   ...(当然,如果你非要改装完全不一样也是可以)这里配置好风扇跟电源主机箱就相当于我们,而不同电脑就相当于子类子类可以调用公开方法,转动风扇,但不能直接改变主机箱颜色,因为并没有提供这样权限

    97050

    Java入门必背100条

    24、赋值运算符:= += -= *= /= %=,运算结果不会改变变量本身数据类型。...58、super调用属性、方法: ①在子类方法或构造器,通过使用”super.属性”或”super.方法”方式,显式调用声明属性或方法,通常情况下,习惯省略”super.”。...②特殊情况:当子类定义了同名属性时,要想在子类调用声明属性,则必须显式使用”super.属性”方式,表明调用声明属性。...③如果子类(或实现)继承和实现接口中声明了同名同参数默认方法,那么子类在没重写此方法情况下,默认调用同名同参数方法。–>优先原则。...⑤如何在子类(或实现)方法调用、接口中被重写方法。

    1K20

    Python入门(16)

    关于字段,它有两种类型: (1)隶属于实例(对象)字段,被称作实例变量(Instance Variables); (2)从属于某一本身字段,被称作变量(Class Variables)。...该类变量只拥有一个副本,当任何一个对象对变量作出改变时,发生变动将在其它所有实例中都会得到体现。 实例变量(Object variable)由每一个独立实例(对象)所拥有。...代码解析: (1)、定义了一个变量x,它将在所有实例中有效,注意:使用时需要前置名,MyClass.x。 (2)、在方法一我们还故意定义了一个同名局部变量:x=-1。...比如,在 Teacher 和 Student 子类,我们可以直接用基方法:SchoolMember.tell(self) (2)、实例会继承所有可读取子类属性(字段和方法) 案例...相反,如果我们没有在子类定义 __init__ 方法,Python 将会自动调用基该方法。 (4)、修改任何功能,它将自动反映在子类。相反,子类修改,则不会影响到其他子类

    84710
    领券