下面是原代码
abstract class TwoDShape { // 定义抽象类
private double width;
private double height;
private String name;
TwoDShape() {
width = height = 0.0;
name = "null";
}
TwoDShape(double w, double h, String n) {
width = w;
height = h;
name = n;
}
TwoDShape(double x, String n) {
width = height = x;
name = n;
}
TwoDShape(TwoDShape ob) {
width = ob.width;
height = ob.height;
name = ob.name;
}
double getWidth() {
return width;
}
double getHeight() {
return height;
}
void setWidth(double w) {
width = w;
}
void setHeight(double h) {
height = h;
}
String getName() {
return name;
}
void showDim() {
System.out.println("Width and height are "+width+" and "+height);}
abstract double area();
} // end class TwoDShape
class Triangle extends TwoDShape { // Triangel 是抽象类 TwoDShape的子类
private String style;
Triangle() {
super();
style = "null";
}
Triangle(String s, double w, double h) {
super(w, h, "triangle");
style = s;
}
Triangle(double x) {
super(x, "triangle");
style = "isosceles";
}
Triangle(Triangle ob) {
super(ob);
style = ob.style;
}
double area() {
return getWidth() * getHeight() / 2;
}
void showStyle() {
System.out.println("Trangle is " + style);
}
} // end class TwoDShape
class Rectangle extends TwoDShape { // Rectangle是抽象类的子类
Rectangle() {
super();
}
Rectangle(double w, double h) {
super(w, h, "retangle");
}
Rectangle(double x) {
super(x, "rectangle");
}
Rectangle(Rectangle ob) {
super(ob);
}
boolean isSquare() {
if (getWidth() == getHeight())
return true;
else
return false;
}
double area() {
return getWidth() * getHeight();
}
} // end class Rectangle
public class AbstractDemo {
public static void main(String [ ] args) {
TwoDShape shapes[ ] =new TwoDShape[4]; // ? shapes[ ]
shapes[0] = new Triangle("right",8.0,12.0);
shapes[1] = new Rectangle(10);
shapes[2] = new Rectangle(10,4);
shapes[3] = new Triangle(7.0);
for(int i = 0; i < shapes.length;i++){
System.out.println("object is " + shapes[i].getName());
System.out.println("Area is " + shapes[i].area());
System.out.println();
}
}
} // end class AbstractDemo
疑问:ob不应该是引用Triangle的对象吗Triangle(Triangle ob) { super(ob); },为什么又在这TwoDShape(TwoDShape ob)
是上转型还是什么呢
子类可以直接转换为父类,只要是TwoDShape类的子类传进来的对象都可以接收。抽象类是介于接口和类之间的,这样定义的目的就是可以让TwoDShape类的任何子类都可以当做参数传进来初始化父类,而不用定义多个方法。
0基础学JAVA(推箱子游戏+QQ即时通讯软件项目实战):https://edu.csdn.net/course/detail/2981
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y