package test0909;
/*
* 1、什么是多态?
* 1) 生活角度: 龙生九子,各有不同;
* 2) 专业角度: 一个类中的属性和方法在子类中通过各自不同的实现,可以具有不同的数据类型或者不同的行为
*
* 2、多态在java中的形式:
* 父类的对象变量引用子类的对象。
* 例如: Person p1 = new Student()
*/
public class ShapeTest{
public static void main(String[] args) {
Shape [] a = new Shape [5];
for (int i = 0; i < a.length ; i++){
a[i] = type() ;
}
//求各个图形的面积,和总面积
double total = 0;
for(int i = 0; i < a.length; i++){
System.out.println(a[i].toString());
total += a[i].area();
}
System.out.println("总面积为:"+ total);
}
public static Shape type(){
int n = (int)(3 * Math.random());
if(n == 0){
return new Circle("圆形", (int)(10 * Math.random()) );
}else if(n == 1){
return new Rectangle("矩形", (int)(10 * Math.random()), (int)(10 * Math.random()) );
}else{
return new Triangular("" , (int)(10 * Math.random()), (int)(10 * Math.random()) );
}
}
}
class Shape {
private String type;
public Shape() {
}
public Shape(String type){
this.type = type;
}
public void setType(String type) {
this.type = type;
}
public String getType() {
return type;
}
//功能方法,求图形的面积;
public double area(){
return 0;
}
public String toString(){
return "平面图形的种类:" + type ;
}
}
class Circle extends Shape{
private int r;
public Circle() {
}
public Circle(String type, int r){
super( type );
this.r = r;
}
public void setR(int r) {
this.r = r;
}
public int getR() {
return r;
}
//重写area方法,求面积;
public double area(){
return Math.PI * r * r ;
}
@Override
public String toString() {
return super.toString() + " 圆的半径为:" + r + " 面积为:" + area() ;
}
}
class Rectangle extends Shape {
private int w;
private int h;
public Rectangle() {
}
public Rectangle(String type, int w, int h){
super( type );
this.w = w;
this.h = h;
}
public int getW() {
return w;
}
public void setW(int w) {
this.w = w;
}
public int getH() {
return h;
}
public void setH(int h) {
this.h = h;
}
// 改写功能方法,计算矩形的面积;
public double area() {
return w * h ;
}
public String toString(){
return super.toString() + " 矩形的宽为:" + w + " 矩形的高:" + h + " 矩形的面积为:" + area() ;
}
}
class Triangular extends Shape{
private int a;
private int h;
public Triangular() {
}
public Triangular(String type, int a, int h){
super( type );
this.a = a;
this.h = h;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getH() {
return h;
}
public void setH(int h) {
this.h = h;
}
//编写功能方法,求矩形的面积;
@Override
public double area() {
return a * h / 2.0 ;
}
public String toString(){
return super.toString() + " 三角形的底边长:" + a + " 高为:" + h + " 面积是:" + area() ;
}
}
笔记14 多态
最新推荐文章于 2025-04-18 21:34:50 发布