子类继承父类的变量和父类原有变量的关系

做项目的时候错认为在子类中修改从父类继续下来的变量值,会影响到其他继承该变量的子类,实际上不是的,每个继承了这个变量的子类,相当于拷贝了一份变量,对变量的修改影响也仅限于自身,不会影响到父类的变量值,更不会影响到其他子类对应的变量值。特意写的demo验证下:

//父类
public abstract class AbstractParent {
    public int common = 1;
    public abstract void printCommon();
}
//子类1
public class Child1 extends AbstractParent{
      @Override
      public void printCommon() {
          System.out.print("common:" + common);
      }
}
//子类2
public class Child2 extends AbstractParent{
      @Override
      public void printCommon() {
          System.out.print("common:" + common);
      }
}
//主类
public class MyTest {

    public static void main(String[] args) {
        Child1 child1 = new Child1();
        child1.common = 6;
        Child2 child2 = new Child2();
        child2.printCommon();
    }

}

执行输出的结果为: common:1,由此可见类child1修改的是从父类common变量的拷贝,不会影响父类common的值

进一步做验证,在子类中声明一个和父类相同的变量并修改其值,修改后的demo为:

public class Child1 extends AbstractParent{
        int common = 10;
        @Override
        public void printCommon() {
            System.out.print("common:" + common);
        }

        public void printParentCommon(){
            System.out.print("parent common:" + super.common);
        }
    }
public class Child2 extends AbstractParent{

    @Override
    public void printCommon() {
        System.out.print("common:" + common);
    }

    public void printParentCommon(){
        System.out.print("parent common:" + super.common);
    }
}
public class MyTest {

    public static void main(String[] args) {
        Child1 child1 = new Child1();
        child1.common = 6;
        Child2 child2 = new Child2();
        Child2 child3 = new Child2();
        child3.common = 10;
        //打印child1
        child1.printCommon();
        System.out.print("\n");
        child1.printParentCommon();
        System.out.print("\n");
        //打印child2
        child2.printCommon();
        System.out.print("\n");
        child2.printParentCommon();
        //打印child3
        System.out.print("\n");
        child3.printCommon();
        System.out.print("\n");
        child3.printParentCommon();
    }

}

输出结果:
common:6
parent common:1
common:1
parent common:1
common:10
parent common:10

由此可见,如果在子类中声明了和父类名称一样的变量,则子类中对自己声明的变量的修改,不影响父类中改变量的值,变量继承的父类和子类内存模型如下图:

这里写图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
感谢您的提问。以下是针对您的问题的回答: 1)针对这个要求,您需要设计一个基础类,包含父类成员变量和方法。然后,您可以设计子类继承基础类,并添加自己的成员变量和方法。在子类中,您可以使用super关键字来访问基础类的方法和成员变量。同时,您还可以重写基础类中已有的方法来实现自己的逻辑。在使用上转型对象时,您可以将子类对象向上转型为基础类对象,并在方法中使用基础类的参数来调用方法。 关于final变量,final关键字可以用来修饰变量,表示该变量的值不可更改。通常情况下,final变量的命名采用全大写字母,以表示这是一个常量。 2)继承与多态是面向对象编程中的两个重要概念。在继承中,子类可以继承父类的属性和方法,避免了重复编写代码的问题。同时,子类还可以重写父类的方法,实现自己的逻辑。在多态中,同一个方法可以在不同的对象中表现出不同的行为,这样可以实现代码的高复用性和扩展性。 3)abstract类和abstract方法是Java中的概念,用来表示某些方法没有具体的实现,需要在子类中进行实现。abstract类不能被实例化,只能用来定义抽象方法和成员变量子类必须实现抽象方法才能被实例化。 4)接口是Java中一个非常重要的概念,它可以用来定义一组行为。接口中可以定义方法和常量,但是这些方法都没有具体的实现,需要在实现接口的类中进行具体实现。接口的使用可以实现扩展开放和修改关闭的原则,因为接口的方法可以被其他类所实现或继承,而不需要修改原有的代码。在使用接口回调时,您可以将一个实现了特定接口的对象传递给一个方法,让该方法在适当的时候回调该对象中的方法。 希望这些回答能对您有所帮助。如果您有任何其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值