设计圆形类和三角形类,求面积。
1.封装:类里封装了数据和方法,封装实现了信息隐藏,保证了数据安全。
2.继承:圆形类和三角形类都是从形状类继承而来,父类和子类之间是一般和特殊(a kind of)的关系,圆形是形状的一种,三角形也是形状的一种。
3.多态:多态一般和继承有关。父类暂时没有图形的具体信息,所以暂时无法实现Area方法,定义为抽象类。需要在子类中实现(重写)父类的Area方法。不管是求什么形状的面积,main函数中永远是通过shape.Area求面积。(shape类似于C++的基类指针,可以指向派生类对象)
下面用冷门语言编写该程序:
import scala.math.sqrt
abstract class Shape
{
def Area:Double
}
class Circle(_r:Double) extends Shape{
var r:Double=_r
def Area:Double={
3.14*r*r
}
}
class Triangle(_a:Double,_b:Double,_c:Double) extends Shape{
var a:Double=_a
var b:Double=_b
var c:Double=_c
def Area:Double={
val l=(a+b+c)/2
sqrt(l*(l-a)*(l-b)*(l-c))
}
}
object ShapeArea {
def main(args:Array[String]):Unit={
var shape:Shape=new Circle(3.0)
println(shape.Area)
shape=new Triangle(3.0,4.0,5.0)
println(shape.Area)
}
}