繁体   English   中英

尽管使用了super关键字,为什么我的派生类方法不会从基类调用overriden方法?

[英]Why isn't my derived class method calling the overriden method from base class despite using the super keyword?

我有三个名为Human.javaSuperhero.javaRun.java的类 超级英雄扩展了人类,方法introduction()在超级英雄中被重写,调用了父类的introduction() 但是,当我创建一个超级英雄对象并调用介绍方法时,它不会打印基类方法的返回值。 怎么了? 提前致谢。

Human.java

public class Human implements Comparable<Human> {
        private int age;
        private String name;

        public Human(String givenName, int age) {
            this.name = givenName;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }

        public String introduce() {
            return "Hey! I'm " + name + " and I'm " + age + " years old.";
        }

        @Override
        public int compareTo(Human H1) {
            if(this.getAge() > H1.getAge())
                return 1;
            else if (this.getAge() < H1.getAge())
                return -1;
            else
                return 0;
        }
}

Superhero.java

public class Superhero extends Human {
    private String alterEgo;
    private int age;
    private String name;

    public Superhero(String givenName, int age, String alterEgo) {
        super(givenName, age);
        this.alterEgo = alterEgo;
    }

    public String getAlterEgo() {
        return alterEgo;
    }

    @Override
    public String introduce(){
        super.introduce();
        return  "I am also known as " + alterEgo + "!";
    }
}

Run.java

public class Run {
    public static void main(String[] args) {
        Superhero superhero = new Superhero("Bruce", 26, "Batman");
        System.out.println(superhero.introduce());
    }
}
@Override
public String introduce(){
    super.introduce();
    return  "I am also known as " + alterEgo + "!";
}

SuperHero类的引入方法是将调用返回的String转储到基本方法并返回"I am also known as " + alterEgo + "!" 代替。

您需要返回由基类的实现+ SuperHero特定字符串返回的String串联的结果:

@Override
public String introduce(){
    return super.introduce() + "I am also known as " + alterEgo + "!";
}

您的方法不打印从超类返回的内容的原因是您的重写方法会丢弃返回值。 一般来说,这没关系,所以Java并没有就此提出警告。 但是,在这种情况下,您希望使用返回值,因此不应忽略调用super.introduce()方法的结果。

你的方法应该取值,并附加到它,如下所示:

@Override
public String introduce(){
    return super.introduce() + "\n"
    +  "I am also known as " + alterEgo + "!";
}

1st:你正在调用super.introduce() ,它返回一个字符串但你没有对该字符串做任何事情。 您需要将其分配给变量并将其添加到return语句中以使其可见。

第二:我建议你将introduction()方法更改为toString(),因为这样你就可以通过编写来获取字符串:

System.out.println(superhero);

这是你需要做的就是回归“嘿!我是”+名字+“而我是”+年龄+“岁。” 部分也是:

@Override
public String toString(){
    return super.introduce() + "\n" +  "I am also known as" + alterEgo +      "!";
}

我个人更喜欢像这样实现我的toString()方法。

@Override
public String toString(){
    String string = super.toString();
    string = string + "\n";
    string = string + "I am also known as";
    string = string + alterEgo;
    string = string + "!";
    return   string;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM