java子类打印参数默认值而不是赋值

标签 java inheritance

我正在阅读和练习以更好地理解 java 继承。当我运行下面的 Lion 类时,它打印出 0 和 null。我认为它应该打印出参数值,即 30 和 roars。我做错了什么?

public class Animal {

    int numTeeth;

    public Animal(int numTeeth) {
        numTeeth = this.numTeeth;
    }

    public int getNumTeeth() {
        return numTeeth;
    }   
    public void setNumTeeth(int numTeeth) {
        this.numTeeth = numTeeth;       
    }
}


public class Lion extends Animal {

    String sound;

    public Lion(int numTeeth, String sound) 
    {
        super(numTeeth);
        sound = this.sound;
    }

    public String getSound() {          
        return sound;
    }

    public void setSound(String sound) {        
        this.sound = sound;
    }

    public static void main(String[] args) {

        Lion simba = new Lion(30, "roars");     
        System.out.println(simba.getNumTeeth());
        System.out.println(simba.getSound());
    }
}

最佳答案

你的现场分配是错误的方式,应该是

this.numTeeth = numTeeth;

this.sound = sound;

否则您将字段分配给局部变量,这没有多大意义。

关于java子类打印参数默认值而不是赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49082750/

相关文章:

javascript - 从子类中访问基类变量

java - spring 自定义注销过滤器在注销之前执行某些操作?

java - 如何从生成的 Java 类文件中删除未使用的常量

java - 未处理的异常类型 Exception

java - 从在 Linux 上运行的 Java 使用 KERBEROS 识别 http 请求

c# - 隐藏继承成员警告

inheritance - 检查对象的父类

java - 如何在 spring 中加载 javascript i18n 属性文件?

c# - 使用protobuf-net继承时如何选择字段编号?

inheritance - f# 类型提供程序继承