【问题标题】:Java adding from multiple classes with an interface使用接口从多个类添加 Java
【发布时间】:2021-10-04 20:15:22
【问题描述】:

基于以下 UML 类图,我试图使用接口(住宅)获取所有 House 和 ApartmentBuilding 对象的总人口,但我一直不知道如何继续。我已经包含了到目前为止的代码。

住宅:

 interface Dwelling {

    int getNumberOfOccupants();


}

房子:

import javafx.scene.canvas.GraphicsContext;

import java.util.Scanner;

public class House extends Building implements Dwelling  {


    private final int bedrooms;
    private final int occupants;

    private House(String name, double xPosition,int bedrooms, int occupants){
        super(name,xPosition);
        this.bedrooms = bedrooms;
        this.occupants = occupants;
    }
    public static House create() {
        Scanner scan = new Scanner(System.in);
        House a;


        System.out.println("Enter name of the House: ");
        String name = scan.nextLine();
        System.out.println("Enter XPosition of the House: ");
        int xPosition = scan.nextInt();
        System.out.println("Enter number of bedrooms: ");
        int bedrooms = scan.nextInt();
        System.out.println("Enter number of occupants: ");
        int occupants = scan.nextInt();

        a = new House(name, xPosition, bedrooms, occupants);


        return a;

    }
    public void draw(GraphicsContext canvas){


    }



    @Override
    public String toString(){
        return "House: " + "bedrooms= " + bedrooms + " occupants= " + occupants + "\n" + super.toString();
    }


    @Override
    public int getNumberOfOccupants() {
        return occupants;
    }
}

公寓楼:

import javafx.scene.canvas.GraphicsContext;

import java.util.Scanner;

public class ApartmentBuilding extends HighRise implements Dwelling{

    private final int occupantsPerFloor;


    private ApartmentBuilding(String name, double xPosition, int numberOfFloors, int occupantsPerFloor){
        super(name, xPosition, numberOfFloors);
        this.occupantsPerFloor = occupantsPerFloor;



    }

    public static ApartmentBuilding create() {

        Scanner scan = new Scanner(System.in);
        ApartmentBuilding a;

        System.out.println("Enter name of the Apartment Building: ");
        String name = scan.nextLine();

        System.out.println("Enter XPosition of the Apartment Building: ");
        int xPosition = scan.nextInt();
        System.out.println("Enter number of floors: ");
        int numberOfFloors = scan.nextInt();
        System.out.println("Enter number of occupants per floor: ");
        int occupantsPerFloor = scan.nextInt();

        a = new ApartmentBuilding(name, xPosition, numberOfFloors, occupantsPerFloor);


        return a;
    }


    public void draw(GraphicsContext canvas){

    }
    @Override
    public String toString(){

        return "Apartment Building: " + "occupantsPerFloor= " + occupantsPerFloor + "\n" + super.toString() + "\n";
    }

    @Override
    public int getNumberOfOccupants() {
        return numberOfFloors * occupantsPerFloor;
    }
}

建筑:

import javafx.scene.canvas.GraphicsContext;

public class Building implements Drawable {


   private final String name;
   private final double xPosition;



    public Building(String name, double xPosition){

            this.name = name;
            this.xPosition = xPosition;
    }




    public String getName(){
        return name;
    }


    public void draw(GraphicsContext canvas) {

    }


    public double getXPosition() {
        return xPosition;
    }






    @Override
    public String toString(){
            return "Type... Building:  " + "name= " + getName() + ", xPosition= " + getXPosition() + "\n";}
    }

高层:

    public class HighRise extends Building{

    int numberOfFloors;


    public HighRise(String name, double xPosition, int numberOfFloors) {
        super(name, xPosition);
        this.numberOfFloors=numberOfFloors;

    }

    public int getNumberOfFloors(){
        return numberOfFloors;
    }    



    @Override
    public String toString() {

        return  "Type... HighRise:  " + "numberOfFloors= " + getNumberOfFloors() + "\n" + super.toString();

    }

}

村庄:

import javafx.scene.canvas.GraphicsContext;

import java.util.Scanner;

public class Village extends Building{

    private static String name;
    private static int xPosition;
    public static final double Y_FLOOR = 300;
    private int size;
    private final String villageName;
    private final Building[] buildings;


    private Village(String villageName, int size){
        super(name, xPosition);
        this.size = size;
        this.villageName = villageName;
        this.buildings = new Building[size];
    }

    public static Village create() {

        Scanner scan = new Scanner(System.in);
        Village a;

        System.out.println("Enter name of village: ");
        String villageName = scan.nextLine();
        System.out.println("Enter number of buildings: ");
        int num = scan.nextInt();

        a = new Village(villageName, num);

        for(int i = 0; i < num; i++) {

            System.out.println("Enter type of Building: 1= House, 2= Apartment, 3= Store ");
            int choice = scan.nextInt();

            if (choice == 1){
                a.buildings[i] = House.create();
            }

            if (choice == 2){
                a.buildings[i] = ApartmentBuilding.create();
            }
        }

        return a;

    }


    public int getPopulation(){


        return size;
    }

    public void draw(GraphicsContext canvas){

    }

    public String toString(){

        String str = "\n"+ "Village of " + villageName + "\n\n";

        for (int i=0; i<buildings.length; i++) {
            str = str + buildings[i].toString() + "\n"; // this adds each buildings information to the string
        }
        return str;
    }



}

我是编程新手,正在努力学习,但不幸的是,我陷入了困境。

【问题讨论】:

  • 您尚未修复您之前的问题中已回答的问题。您不需要转储所有代码。你的问题是什么? 我被卡住了不是问题。

标签: java inheritance interface polymorphism abstract-class


【解决方案1】:

..我正在尝试使用接口(住宅)获取所有 House 和 ApartmentBuilding 对象的总人口..

使用该 UML 时无法获取人口。请尝试如下修改。

  • 首先,Dwelling 必须声明 getPopulation();
  • 在 House 和 ApartmentBuilding 中实现 getPopulation()
  • 您还需要一个变量来保持 House 和 ApartmentBuilding 类中的人口(它将在调用 getPopulation() 时返回)。 之后,您可以将 House 和 ApartmentBuilding 转换为 Dwelling。然后是住宅.getPopulation()。希望有用。

【讨论】:

    猜你喜欢
    • 2012-08-23
    • 2016-09-25
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多