转载

TypeScript中的继承经典作业

要求: 

  定义
                抽象类图形  Shape
                        抽象方法:
                                边长
                                面积

                子类  Circle  圆  继承图形
                        属性
                                半径  r  number,
                                圆心  o  Point;

                子类  Rect  矩形  继承图形
                        属性
                                顶点  top  Point;
                                宽    w  number
                                高    h  number

                额外的类
                Point
                        x:number;
                        y:number;

              在  App  运行

抽象图形Shape类:

abstract class Shape {

    // 抽象方法
    // 计算获得周长
    abstract length(): number;
    // 计算获得面积
    abstract area(): number;

    abstract display(): void;
}

圆形Cricle类:

class Cricle extends Shape {

    // 圆心---定义一个类Point
    // 成员变量,实例变量,每个对象维系自己的版本
    // x:number;
    // y:number;
    // o:Point=new Point(); TS与java存在差异
    o: Point;
    // 半径
    r: number;
    /**
     * 创建一个圆
     * @param o  圆心,可选,默认值(0,0)
     * @param r  半径 ,可选 ,默认值 1
     */
    constructor(o: Point = new Point(), r: number = 1) {
        // 调用父类构造器
        super();
        this.o = o;
        this.r = r;
    }
    length(): number {
        // 局部变量
        let n = 2 * Math.PI * this.r;
        return n;
    }
    area(): number {
        // 加this表示成员变量,不加this表示局部变量
        return Math.PI * this.r * this.r;
    }

    display() {
        console.log(`圆心:(${this.o.x},${this.o.y}),半径:(${this.r})`);

    }
}

矩形Rect类:

// 矩形
class Rect extends Shape {



    // ES6 不可以定义成员变量,写在构造器
    // ES7 可以定义

    // top:Point;
    // width:number;
    // height:number;



    constructor(public top: Point = new Point(9, 9), private width: number = 3, private heigth: number = 4) {
        super();
        this.top = top;
        this.width = width;
        this.heigth = heigth;

    }

    length(): number {
        return 2 * (this.width + this.heigth);
    }
    area(): number {
        return this.width * this.heigth;
    }
    display(): void {
        console.log(`顶点:(${this.top.x},${this.top.y}),宽:${this.width},高:${this.heigth}`);

    }
}

点Point类:

class Point {

    x: number;
    y: number;
    /**
     * 
     * @param x  x 坐标值
     * @param y  y 坐标值
     */
    constructor(x: number = 0, y: number = 0) {
        this.x = x;
        this.y = y;
    }

    // 其他方法
}

 APP类:

class APP {

    // 静态方法
    static main(): void {
        console.log("开始 APP main");

        // let a: Cricle;
        // // 


        // a=new Cricle();//(0,0),1
        // console.log(a.length());
        // console.log(a.area());
        // a.display();

        // a=new Cricle(new Point(1,2),9);//(0,0),9
        // console.log(a.length());
        // console.log(a.area());
        // a.display();


        // let b=new Rect(new Point(3,4),9,100);
        // b.display();
        // console.log(b.length());
        // console.log(b.area());

        let x: Shape;
        console.log(typeof x);


        // 父类型的引用操作子类型的变量
        x = new Cricle();
        x.display();
        console.log(typeof x);

        x = new Rect();
        x.display();
        console.log(typeof x);


        console.log("结束 APP main");

    }
}

调用APP的静态方法:

APP.main();

输出结果为:

undefined
圆心:(0,0),半径:(1)
object
顶点:(9,9),宽:3,高:4
object
结束 APP main

D:\TSCode>

 

正文到此结束
本文目录