主类..。
import java.io.*;
public class RecMain
{
public static void main(String[]args)throws IOException
{
Rectangle rec1 = new Rectangle(5.3f,7.2f);
Rectangle rec2 = new Rectangle();
Rectangle rec3 = new Rectangle(12378438,37648363);
rec1.showData();
rec2.showData();
rec3.showData();
}
}
和Rectangle类
import java.io.*;
class Rectangle
{
private int len=0, bdt=0;
private float len2=0, bdt2=0;
public Rectangle()
{
}
public Rectangle(int length, int breadth)
{
len=length;
bdt=breadth;
}
public Rectangle(float length, float breadth)
{
len2=length;
bdt2=breadth;
}
public void setData() throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
len2=Float.parseFloat(br.readLine());
bdt2=Float.parseFloat(br.readLine());
}
public void showData()
{
System.out.println("Length: "+len+"\nBreadth: "+bdt);
System.out.println("Length: "+len2+"\nBreadth: "+bdt2);
}
}
我想做的是,对所有对象使用相同的showData(),这样对于rec1,结果将是len2和bdt2,而对于rec3,结果将是len和bdt。有什么方法可以做到这一点吗?
发布于 2020-05-25 02:10:33
您可以使用if检查len是否为0或len2是否为0,然后相应地显示结果。因此,如果len为0,则可以打印len2和bdt2。否则,显示len和bdt。
发布于 2020-05-25 02:19:09
如果你被允许使用泛型,你可以去掉重复的矩形参数:
abstract class Rectangle<T extends Number> {
protected T len, bdt;
Rectangle() {}
Rectangle(T length, T breadth) {
this.len = length;
this.bdt = breadth;
}
public void showData() {
System.out.println("Length: " + len + ", breadth: " + bdt);
}
public abstract void setData() throws IOException;
}
//----- test -----
Rectangle<Float> rec1 = new Rectangle<Float>(5.3f, 7.2f) {
@Override
public void setData() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
len =Float.parseFloat(br.readLine());
bdt =Float.parseFloat(br.readLine());
}
};
Rectangle<Integer> rec2 = new Rectangle<Integer>(2, 3) {
@Override
public void setData() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
len =Integer.parseInt(br.readLine());
bdt =Integer.parseInt(br.readLine());
}
};
rec1.showData();
rec2.showData();
输出:
Length: 5.3, breadth: 7.2
Length: 2, breadth: 3
发布于 2020-05-25 02:46:28
我想知道为什么你的代码中有private int len=0, bdt=0;
?你为什么不干脆把它们扔掉呢?
如下所示:
import java.io.*;
class Rectangle {
private float length, breadth;
public Rectangle() {
}
public Rectangle(float length, float breadth) {
this.length = length;
this.breadth = breadth;
}
public void setData() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
length = Float.parseFloat(br.readLine());
breadth = Float.parseFloat(br.readLine());
}
public void showData() {
System.out.println("Length: "+length+"\nBreadth: "+breadth);
}
}
来自RecMain
的代码仍然可以编译。
PS:我想知道为什么您在原始代码中将length
和breadth
截断为len
和bdt
。这使得阅读变得更加困难。
我也会在你的代码中把float
改成double
。
如果您出于某种原因需要使用带有int的矩形,我将使用一个具有公共接口的单独类:
interface Rectangle {
void setData() throws IOException;
void showData();
}
然后像这样实现接口:
class IntRectangle implements Rectangle {
private int length, breadth;
public Rectangle() {
}
public Rectangle(int length, int breadth) {
this.length = length;
this.breadth = breadth;
}
public void setData() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
length = Integer.parseInt(br.readLine());
breadth = Integer.parseInt(br.readLine());
}
public void showData() {
System.out.println("Length: "+length+"\nBreadth: "+breadth);
}
}
具有float
的类也是如此(将其重命名为FloatRectangle
)。
https://stackoverflow.com/questions/61990081
复制相似问题