如何在子类对象的抽象类中访问私有属性的值?

短棍

我正在用Java上一堂课,这个问题与我要完成的一项练习有关。我正在尝试打印从抽象超类的2个子类创建的对象数组的内容。我能够创建对象并将它们存储在数组中,但是当我打印出数组的内容时,我只能获得超类的“ age”和“ weight”属性的最后一个实例。如您所见,它们是私有属性。创建对象时,是否可以访问这些属性的值?我已经做了大量的阅读工作,但是我对是否可以阅读感到困惑,如果可以的话,那又如何呢?我的代码:

public abstract class Parent {
    private static int age;
    private static double weight;
    public Animal(int age, double weight) {
        this.age = age;
        this.weight = weight;
        }
    public static int getAge() {
        return age;
        }
    public static double getWeight() {
        return weight;
        }
    }

public class Child1 extends Parent {
    private String name, owner, petInfo;
    protected int age;
    protected double weight;
    public Child1(int age, double weight, String name, String owner) {
        super(age, weight);
        this.name = name;
        this.owner = owner;
        }
    public String toString() {
        petInfo = "Pet's name: " + this.getName() + "\nPet's age: " + getAge() + " years\nPet's weight: " + getWeight() + " kilos\nOwner's name: " + this.getOwner();
        return petInfo;
        }
    }

public class Child2 extends Parent {
    public String wildInfo;
    public Child2(int age, double weight) {
        super(age, weight);
        }
    public String toString() {
        wildInfo = "The wild animal's age: " + getAge() + "\nThe wild animal's weight: " + getWeight();
        return wildInfo;
        }
    }

public class Console {
    public static void main(String[] args) {
        Parent ref[] = new Parent[5];
        for(i = 0; i < 5; i++) {
        //user input here
        Child1 pet = new Child1(age, weight, name, owner);
        ref[i] = pet;
        //more user input
        Child2 wild = new Child2(age, weight);
        ref[i] = wild;
        }
        //print contents of array
        for(Parent item : ref)
            System.out.println("\n" +item.toString()+ "\n");

我的理解是,我只能通过方法访问超类的属性。当我在toString()中使用getAge()和getWeight()方法时,我没有得到为每个对象输入的值,只有属性具有的最后一个值。任何帮助将不胜感激。干杯。

充满鳗鱼的气垫船

不要为年龄和体重使用静态变量:

private static int age;
private static double weight;

对于此类型的所有对象,静态变量的值都相同,因为这些变量是变量,而不是实例变量。这些家伙应该是实例或非静态字段,这将使它们对于此类的每个实例(或子类的实例)都是唯一的。

然后在您的Child类中,摆脱这些阴影变量,因为它们将对Parent类中类似命名的字段进行阴影:

public class Child1 extends Parent {
    private String name, owner, petInfo;
    protected int age;            // ***** get rid of, since it shadows
    protected double weight;      // ***** get rid of, since it shadows

相反,无论您在何处使用这些控件,都应使用Child类中的getter和setter方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在子类对象的抽象类中访问私有属性的值?

来自分类Dev

从抽象类对象列表访问子类的属性

来自分类Dev

如何从具体子类中的重写方法访问通过抽象类中的构造函数实例化的对象的属性?

来自分类Dev

抽象类中的 ModelAttribute 具有来自子类的值

来自分类Dev

Java中的私有抽象类

来自分类Dev

如何在抽象类中具有函数以TypeScript返回子类的实例

来自分类Dev

如何在Django中访问模型的父抽象类

来自分类Dev

当类从抽象类扩展时,如何访问其私有变量?

来自分类Dev

当类从抽象类扩展时,如何访问其私有变量?

来自分类Dev

抽象类从子类获取属性值

来自分类Dev

子类如何访问抽象类的非静态成员?

来自分类Dev

您可以在抽象类中声明私有属性吗?

来自分类Dev

Django访问抽象类的子类项

来自分类Dev

抽象类中的私有实例变量

来自分类Dev

Scala抽象类中的私有构造函数?

来自分类Dev

Scala抽象类中的私有构造函数?

来自分类Dev

如何从抽象类访问继承的类的属性

来自分类Dev

toString() 定义在抽象类的私有成员上,那么为什么打印子类对象会与抽象类的私有成员一起打印?

来自分类Dev

如何覆盖子类中的抽象类构造函数

来自分类Dev

如何从Boost Python中的抽象类访问派生类对象

来自分类Dev

抽象类与私有构造函数

来自分类Dev

抽象类的子类有哪些限制?

来自分类Dev

重写超类的非抽象方法。可以访问超类中的私有属性(?)

来自分类Dev

如何在 Julia 中为抽象类型的所有参数子类型定义方法?

来自分类Dev

如何在抽象类中调用非抽象方法?

来自分类Dev

如何在不使用 setter 的情况下从子类访问超类中的私有字段?

来自分类Dev

如何在其父类的数组中访问子类的属性

来自分类Dev

抽象类中的私有字段与私有静态字段

来自分类Dev

如何在Java的实现类中的抽象类内实现抽象类?

Related 相关文章

  1. 1

    如何在子类对象的抽象类中访问私有属性的值?

  2. 2

    从抽象类对象列表访问子类的属性

  3. 3

    如何从具体子类中的重写方法访问通过抽象类中的构造函数实例化的对象的属性?

  4. 4

    抽象类中的 ModelAttribute 具有来自子类的值

  5. 5

    Java中的私有抽象类

  6. 6

    如何在抽象类中具有函数以TypeScript返回子类的实例

  7. 7

    如何在Django中访问模型的父抽象类

  8. 8

    当类从抽象类扩展时,如何访问其私有变量?

  9. 9

    当类从抽象类扩展时,如何访问其私有变量?

  10. 10

    抽象类从子类获取属性值

  11. 11

    子类如何访问抽象类的非静态成员?

  12. 12

    您可以在抽象类中声明私有属性吗?

  13. 13

    Django访问抽象类的子类项

  14. 14

    抽象类中的私有实例变量

  15. 15

    Scala抽象类中的私有构造函数?

  16. 16

    Scala抽象类中的私有构造函数?

  17. 17

    如何从抽象类访问继承的类的属性

  18. 18

    toString() 定义在抽象类的私有成员上,那么为什么打印子类对象会与抽象类的私有成员一起打印?

  19. 19

    如何覆盖子类中的抽象类构造函数

  20. 20

    如何从Boost Python中的抽象类访问派生类对象

  21. 21

    抽象类与私有构造函数

  22. 22

    抽象类的子类有哪些限制?

  23. 23

    重写超类的非抽象方法。可以访问超类中的私有属性(?)

  24. 24

    如何在 Julia 中为抽象类型的所有参数子类型定义方法?

  25. 25

    如何在抽象类中调用非抽象方法?

  26. 26

    如何在不使用 setter 的情况下从子类访问超类中的私有字段?

  27. 27

    如何在其父类的数组中访问子类的属性

  28. 28

    抽象类中的私有字段与私有静态字段

  29. 29

    如何在Java的实现类中的抽象类内实现抽象类?

热门标签

归档