当前位置: 首页 > 面试题库 >

属性和多态

沈长恨
2023-03-14
问题内容

我有2节课:

public class Increase {
public int a=3;
public void add(){
    a+=5;
    System.out.println("f");
}
}

class SubIncrease extends Increase{
    public int a=8;
    public void add(){
        a+=5;
        System.out.println("b" + a);

    }
}

但是当我跑步时

    Increase f=new SubIncrease();
    System.out.println(f.a);
    f.add();
    System.out.println(f.a);

我得到以下输出:

3
b13
3

谁能帮助我了解为什么会这样?a属性的值在方法add中更改,如第二行输出所示…为什么它返回到原始值?


问题答案:

在Java中,字段不会被覆盖,而是被隐藏。这意味着Increase.aSubIncrease.a独立的
,可以被改变并且分别查询字段。因为您的变量的类型fIncrease,所以表达式f.a返回超类字段的值。但是该add()方法
覆盖并f.add()调用子类方法,该方法将修改子类字段。

隐藏字段很少有意义,因此应避免使用它。如果要在子类中拥有一个具有不同默认值的字段,请仅在超类中对其进行定义,并在子类构造函数中为其分配一个值。



 类似资料:
  • 属性与Java中的字段是相同的,但是更加强大。属性做的事情是字段加上getter加上setter。我们通过一个例子来比较他们的不同之处。这是Java中字段安全访问和修改所需要的代码: public class Person { private String name; public String getName() { return name; }

  • 我有一个按月-年字符串属性排序的对象列表。我的对象类定义如下 我想对会员人数、非会员人数、会员付款、非会员付款进行累计和 所以我的新对象列表如下 我尝试与但它给我所有的总和不累积。 非常感谢任何指点。

  • 我有一个对象列表,如下所示,我想将它们按3个属性分组,并将第4个属性相加 我做了如下类似的事情,但它生成了许多地图,我无法得到求和的方法,因为它也需要一些逻辑 如何使用和逻辑获取分组列表列表?

  • 由于Python是动态语言,根据类创建的实例可以任意绑定属性。 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(self, name): self.name = name s = Student('Bob') s.score = 90 但是,如果Student类本身需要绑定一个属性呢?可

  • 本文重要内容 CSS的单位 字体属性 文本属性 定位属性:position、float、overflow等 CSS的单位 html中的单位只有一种,那就是像素px,所以单位是可以省略的,但是在CSS中不一样。CSS中的单位是必须要写的,因为它没有默认单位。 绝对单位: 1 in=2.54cm=25.4mm=72pt=6pc。 各种单位的含义: in:英寸Inches (1 英寸 = 2.54 厘米

  • 主要内容:类变量(类属性),实例变量(实例属性),局部变量无论是类属性还是类方法,都无法像普通变量或者函数那样,在类的外部直接使用它们。我们可以将类看做一个独立的空间,则类属性其实就是在类体中定义的变量,类方法是在类体中定义的函数。 前面章节提到过,在类体中,根据变量定义的位置不同,以及定义的方式不同,类属性又可细分为以下 3 种类型: 类体中、所有函数之外:此范围定义的变量,称为类属性或类变量; 类体中,所有函数内部:以“self.变量名”的方式定义的