如何解决Java从具有接口的多个类添加
基于下面的 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,int numberOfFloors,int occupantsPerFloor){
super(name,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,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,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;
}
}
我是编程新手,正在努力学习,但不幸的是,我陷入了困境。
解决方法
..我正在尝试使用接口(住宅)获取所有 House 和 ApartmentBuilding 对象的总人口..
使用该 UML 时无法获取人口。请尝试如下修改。
- 首先,Dwelling 必须声明 getPopulation();
- 在 House 和 ApartmentBuilding 中实施 getPopulation()
- 您还需要一个变量来将人口保持在 House 和 ApartmentBuilding 类中(它将在调用 getPopulation() 时返回)。 之后,您可以将 House 和 ApartmentBuilding 转换为 Dwelling。然后dwelling.getPopulation()。希望有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。