我可以在子类中使用超类中的方法而不覆盖它吗?

时间:2016-07-22 04:56:59

标签: java inheritance

我确定这是一个简单的问题,但我不知道答案。首先,是否可以做这样的事情?

public class Entity {


public void sayHi() {
        System.out.println(“Hi there!”);
    }
}

public class Person extends Entity {
    public void sayHi() {
        System.out.println(“I’m a person!”);
    }
}

打印出来的地方是:HI那里!我是一个人! 这只是一个例子,但这可能吗?如果是这样我该怎么办?因为这样,实际的打印输出将是“我是一个人!”#34;。 Person中的sayHi()方法是否必须有自己的打印输出,并说出#34; Hi There!"为了这个工作?

如果您有任何问题,请发表评论,我会尽力而为。感谢。

3 个答案:

答案 0 :(得分:5)

是的,您只需从子类中的方法调用超类中的方法。

请参阅The Java™ Tutorials - Using the Keyword super

public class Entity {
    public void sayHi() {
        System.out.println("Hi there!");
    }
}
public class Person extends Entity {
    @Override
    public void sayHi() {
        super.sayHi();
        System.out.println("I’m a person!");
    }
}

答案 1 :(得分:1)

        public class Entity {
        public void sayHi() {
            System.out.print("Hi there!");

        }
    }
    public class Person extends Entity {
        super.sayHi();
System.out.print("I’m a person!");
    }

I think this may helps you.

答案 2 :(得分:0)

关于Andreas的anwser,有一种方法可以不添加超级'通过java反射:

public class Entity {
    public void sayHi() {
        System.out.println("Hi there!");
    }
}

public class Person extends Entity {
    public void sayHi() {
        System.out.println("I’m a person!");
    }
}

public class Tester {
    public static void main(String[] args) throws Throwable {
        Person x = new Person();
        MethodHandle h1 = MethodHandles.lookup().findSpecial(x.getClass().getSuperclass(), "sayHi",
                MethodType.methodType(void.class),
                x.getClass());

        h1.invoke(x);
        x.sayHi();
    }
}