gpt4 book ai didi

java - 为什么java多态性在我的例子中不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 14:48:20 24 4
gpt4 key购买 nike

我有这 4 个 java 类:1

public class Rect {
double width;
double height;
String color;

public Rect( ) {
width=0;
height=0;
color="transparent";
}

public Rect( double w,double h) {
width=w;
height=h;
color="transparent";
}

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

2

public class PRect extends Rect{
double depth;

public PRect(double w, double h ,double d) {
width=w;
height=h;
depth=d;
}

double area()
{
return width*height*depth;
}
}

3

public class CRect extends Rect{ 
String color;

public CRect(double w, double h ,String c) {
width=w;
height=h;
color=c;
}

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

4

public class test {

public test() { }

public static void main(String[] args) {
Rect r1=new Rect(2,3);
System.out.println("area of r1="+r1.area());

PRect pr1=new PRect(2,3,4);
System.out.println("area of pr1="+pr1.area());


CRect cr1=new CRect(2,3,"RED");
System.out.println("area of cr1="+cr1.area()+" color = "+cr1.color);


System.out.println("\n POLY_MORPHISM ");
Rect r2=new Rect(1,2);
System.out.println("area of r2="+r2.area());

Rect pr2=new PRect(1,2,4);
System.out.println("area of pr2="+pr2.area());


Rect cr2=new CRect(1,2,"Blue");
System.out.println("area of cr2="+cr2.area()+" color = "+cr2.color);

}
}

我得到了输出:

area of r1=6.0area of pr1=24.0area of cr1=6.0  color = REDPOLY_MORPHISM area of r2=2.0area of pr2=8.0area of cr2=2.0  color = transparent***

为什么将 cr2 视为具有“透明”颜色的 Rect(父类(super class))而不是具有“蓝色”颜色的 CRect(子类)?

最佳答案

这是使用可见字段的问题之一 - 你最终会使用它们......

您在 RectCRect 中都有一个 color 字段。字段不是多态的,因此当您使用cr2.color时,它使用Rect中声明的字段,始终 em> 设置为“透明”

您的 CRect 类不应该有自己的 color 字段 - 它应该向父类(super class)构造函数提供颜色。单个矩形有两个不同的 color 字段是没有意义的 - 当然,它可以有 borderColorfillColor - 但只是 >颜色太模糊了...

关于java - 为什么java多态性在我的例子中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24113901/

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