P159练习 1

该博客探讨了一段Java代码中涉及抽象类、继承和类型转换的问题。代码定义了Shape抽象类及其子类Square和Circle,然后在TestShape类的main方法中创建了这两个对象并尝试将Circle对象强制转换为Square对象,导致ClassCastException。博主分析了错误原因并展示了修正后的代码运行结果,强调了类型安全的重要性。
摘要由CSDN通过智能技术生成

代码分析与改错:请指出如下Java代码中存在的错误,并解释原因。注释掉错误语句后,程序输出结果是什么?请解释原因。

abstract class Shape { // 几何图形
	public abstract double getArea();
}

class Square extends Shape {
	private double height = 0;// 正方形的边长

	public Square(double height) {
		this.height = height;
	}

	public double getArea() {
		return (this.height * height);
	}
}

class Circle extends Shape {
	private double r = 0;// 圆的半径
	private final static double PI = 3.14;// 圆周率

	public Circle(double r) {
		this.r = r;
	}

	public double getArea() {
		return (PI * r * r);
	}
}

class TestShape {
	public static void main(String[] args) {
		Shape square = new Square(3);
		Shape circle = new Circle(2);
		System.out.println(square.getArea());
		System.out.println(circle.getArea());
		Square sq = (Square) circle;// 报错
		System.out.println(sq.getArea());//报错
	}
}

修改前运行结果:
9.0
12.56
Exception in thread "main" java.lang.ClassCastException: P159.Circle cannot be cast to P159.Square
	at P159.TestShape.main(T1.java:38)

错误原因:Square不能强行转化为Circle

修改后运行结果:
9.0
12.56

原因:正常运行计算正方形和圆的面积

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值