gpt4 book ai didi

java - 继承和抽象如何与多个类一起工作? [java]

转载 作者:行者123 更新时间:2023-12-01 06:23:44 27 4
gpt4 key购买 nike

我在理解继承在 Java 中的工作原理时遇到问题。我有 3 个相互扩展的类。第三堂课是我遇到问题的棘手类(class)。

public abstract class Shape{ 
//methods and variables
protected final static int X_MAX_SIZE = 800;
protected final static int Y_MAX_SIZE = 600;
private int xCord;
private int yCord;

public void setX(int newX){
if(newX > 0 && newX < 800){
this.xCord = newX;
}
else {
System.out.println("Invalid size.");
this.xCord = 0;
}
}

public int getX(){
return xCord;
}

public void setY(int newY){
if(newY > 0 && newY < 600){
this.yCord = newY;
}
else{
System.out.println("Invalid size.");
this.yCord = 0;
}

}

public int getY(){
return yCord;
}

public Shape(){

}

public Shape(int xCord, int yCord){

}

abstract void display();
abstract double area();

}

public class Rectangle extends Shape {
// the inherited methods and calculations
int width, height;

public int getHeight(){
return height;
}
public void setHeight(int newHeight){
this.height = newHeight;
}

public int getWidth(){
return width;
}
public void setWidth(int newWidth){
this.width = newWidth;
}

public Rectangle(){

}

public Rectangle(int x, int y, int height, int width){
setX(x);
setY(y);
setHeight(height);
setWidth(width);

}

@Override
void display(){
String toScreen = "Rectangle X: " + getX() + "\nRectangle Y: " + getY();
String toScreenInfo = "\nRectangle height: " + getHeight() + "\nRectangle Width:getWidth();
String toScreenArea = "\nRectangle area: " + area();
System.out.println(toScreen + toScreenInfo + toScreenArea);
}

@Override
double area(){
return (width * height);
}

}

}

public class Square extends Rectangle {
// more methods, but no new variables. & calculations


public Square(int x, int y, int height, int width){
setX(x);
setY(y);
setHeight(height);
setWidth(width);
}

public Square(){
super();
}

@Override
public void setHeight(int height){
if(height != getWidth()){
height = getWidth();
}
}
@Override
public void setWidth(int width){
if(width != getHeight()){
width = getHeight();
}
}

@Override
double area(){
return (width * height);
}

@Override
void display(){
String toScreen = "Square area is " + area();
}
}
}

Square 类我什至调用 main 时都遇到困难。所以我的目标是更改 Square 类的值,以确保“高度”和“宽度”彼此相等,从而形成一个正方形。限制是我无法在 get/set 和构造函数中创建任何新变量。

最佳答案

继承应该始终表达对象之间的"is"关系,正如您的示例中所示。

正方形是长方形。矩形是一种形状。

如果对象自然不具有“is a”关系,那么继承可能不是组织它们的糟糕方法(基于接口(interface)的类型层次结构可能更好)。

正方形将具有矩形的成员(方法和字段)。矩形将具有形状的成员(方法和字段)。子类可以重写父方法以提供更具体的行为。

如果您遇到更具体的问题,则必须向我们提供更多帮助。

关于java - 继承和抽象如何与多个类一起工作? [java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27339624/

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