【问题标题】:Java parent class using child class attributesJava父类使用子类属性
【发布时间】:2020-10-20 16:34:49
【问题描述】:
public animal{

        String name;
        String species;

        public introduction(){
                System.out.println("Hi, my name is" + name +", i am a " + species);
        }
}

public dog extends animal{
        String species = "dog";
}

我想知道我是否要使用它们独特的species 变量来构建更多的子类,如猫、鸟等。如果有什么方法可以让他们根据自己的物种进行不同的自我介绍?

我知道我要求父类访问子类属性,这似乎首先违背了继承的目的,但我不确定这样做的更优雅的方式是什么。

【问题讨论】:

    标签: java inheritance


    【解决方案1】:

    根据您的animal.class,您似乎已经定义了一个公共成员变量namespecies。这显然是子类的一部分,即cat.classdog.class

    你的父类有语法错误函数应该像这样返回void

    public void introduction(){
           System.out.println("Hi, my name is" + name +", i am a " + species);
    }
    
    

    您的子类将如下所示:

    class Cat extends Animal{
     
      public Cat(){
        super.name = "tom"
        super.species = "cat"
      }
    
    }
    
    class Mouse extends Animal{
     
      public Mouse(){
        super.name = "jerry" //simply calling name = "jerry" will work as this is inherited.
        super.species = "mouse"
      }
    
    }
    

    请注意,我没有子级成员变量,您可以这样称呼它们:

    Animal cat = new Cat();
    Animal mouse = new Mouse();
    
    cat.introduction(); // prints Hi, my name is tom...
    mouse.introduction(); //prints Hi, my name is jerry ... 
    
    

    此外,遵循编程指南作为 CamelCasing 类是一个很好的做法。例如(动物而不是动物)

    【讨论】:

    • 构造函数中不需要super。该字段已被继承
    • 我知道,我认为 OP 是 Java 新手,不想让他/她感到困惑
    • 我尝试过使用this.name = "Tom" & this.species = "cat",但是没有用;是因为关键字this 默认将值分配给子级属性吗?并使用super 将值分配给父属性?对吗?
    • 你的父类变量必须是公共的或受保护的才能被继承,如果你没有明确说它是封装的私有但在包中是公共的。
    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多