gpt4 book ai didi

java - 在不使用实例的情况下调用更高层级(祖 parent )的方法

转载 作者:行者123 更新时间:2023-11-29 19:09:02 31 4
gpt4 key购买 nike

嗨,我有如下三个类,A 类是父类,B 类是 A 的子类并且其中没有任何内容,C 类是 B 的子类和具有主要功能的测试类:

public class A {    
double pay =0.0;
public double calculatePay(int hoursWorked,double rate) {
pay = hoursWorked*rate;
return pay;
}
}

public class B extends A {
}

public class C extends B {
public double show() {
double paid = calculatePay(10, 1.3);
return paid;
}
}

public class Test {
public static void main(String[] args) {
C c = new C();
System.out.println(c.show());
}

我的问题是如何在不使用实例/对象的情况下从 C 类调用祖父类 A 的 calculatePay() 方法。根据我对继承的理解,我会想到我需要一个 A 或 C 的实例来调用这样的祖 parent 方法,即使我知道我已经从 A 继承了 calculatePay 方法,我仍然需要一个 A 或 C 的实例?

A a = new A();
a.calculatePay;

C c = new C();
c.calculatePay;

我不能使用 super 关键字,因为 A 不是 C 的父代而是祖父代。相反,我只是这样调用它并将其存储在 double 变量中:

  double paid = calculatePay(10, 1.3); 

当我从 main () 运行程序时,它可以工作并根据祖 parent 中的逻辑为我提供正确的输出。有人可以解释一下吗?我在 android 编程中看到了这一点,你从类中的祖 parent 那里调用 getMethods() ,这些类就像层次结构中的 3 个级别

最佳答案

由于该方法是继承的,因此两者都可以工作 - 您只需要正确的语法:

A a = new A();
a.calculatePay(10, 1.3);

如果您改用 C c = new C() 则完全相同。

您不必在 Java 中做任何特殊的事情——因为在 A 类中声明的(非私有(private))方法可以在子类的实例上调用。

除此之外:截至目前,拥有 3 个不同的类(class)是没有意义的。 B 扩展 A 并没有意义的。您不必写下 B extends A,因为您可以。您这样做是因为这样做有意义 - 因为它可以帮助您解决问题。

您的问题根本不需要三个类和继承。

关于您的实际问题:您必须了解 Java 或 C++ 等 OO 语言通常是一种“表”方法。意思是:当你在一个对象上调用一个方法时,发生的事情是“系统”查找该对象类的表 - 并且该表告诉它调用“哪个”方法(参见 here 进一步阅读) .从这个意义上说,如果你这样做没有任何区别

this.foo() ... within class Foo

someFooObject.foo()

而这正是 您的 代码所做的 - 只需在 C.show() 中说 calculatePay(10, 1.3) ... 您正在调用该方法在 this 上隐式引用。

关于java - 在不使用实例的情况下调用更高层级(祖 parent )的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46068994/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com