【问题标题】:Java Non-static method 'getNumberOfOccupants()' cannot be referenced from a static context [duplicate]无法从静态上下文中引用 Java 非静态方法“getNumberOfOccupants()”[重复]
【发布时间】:2021-07-29 15:12:50
【问题描述】:

这是我的代码:

interface Dwelling {
int getNumberOfOccupants();
}

public class House extends Building implements Dwelling  {
@Override
public int getNumberOfOccupants() {
    return occupants;
}
}

public class ApartmentBuilding extends HighRise implements Dwelling{
@Override
    public int getNumberOfOccupants() {
        totalOccupants = numberOfFloors * occupantsPerFloor;
        return totalOccupants;
    }
 }



public class Village extends Building{
public int getPopulation(){
        size = House.getNumberOfOccupants() + ApartmentBuilding.getNumberOfOccupants();
        return size;
    }
 }

当我尝试从 HouseApartmentBuilding 类中添加 getNumberOfOccupants() 方法时,我得到一个非静态方法“getNumberOfOccupants()”不能从静态上下文错误中引用。我不确定如何添加这些方法来生成 getPopulation() 方法

【问题讨论】:

  • 你不能,因为那些方法不是static。它们也不应该如此,因为房屋和其他建筑物的关键属性各不相同,这些属性并不特定于一个阶级。此外,您的人口方法实施(尝试)表明您有一个拥有一所房子和一套公寓的村庄 - 这不是有点奇怪吗?
  • 好吧,对不起,我正在学习 java,但我不确定如何获取所有建筑物的总人口数?
  • Village extends Building 没有多大意义。村庄不是更具体的单体建筑类型。村庄是包含建筑物的东西,但不是建筑物本身。因此,您的 Village 类不应扩展 building 类,但能够保存其构成的建筑物列表/数组。
  • 在编写代码(最后一件事)之前,您需要更多地考虑您的设计。想一想 - 什么是村庄?

标签: java polymorphism abstract-class


【解决方案1】:

您已经在 House 类中创建了实例方法 getNumberOfOccupants(),在 ApartmentBuilding 类中也是如此。像这样调用是静态方法,这就是你得到错误的原因。

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多