第9周笔记 下

练习
练习1:形状类Shape(父类),包含Size属性和计算面积getArea()方法。圆类Circle继承Shape,可以计算圆的面积。正方形类Square继承Shape,可以计算正方形面积。最终要求能实现:Shape sh=new Circle(5);sh.getArea()能计算出圆的面积。Shape sh=new Square(5);sh.getArea()能计算出正方形的面积。
namespace 计算面积
{

class Program
{
    static void Main(string[] args)
    {
        Shape shape1 = new Circle(5);
        Console.WriteLine(shape1.getArea());
        
        Shape shape2 = new Square(10, 10);
        Console.WriteLine(shape2.getArea());
        
        Console.ReadKey();
    }
}
/// <summary>
/// 形状类
/// </summary>
abstract class Shape
{
    private double _width;
    /// <summary>
    /// 宽í
    /// </summary>
    public double Width
    {
        get { return _width; }
        set { _width = value; }
    }
    private double _height;
    /// <summary>
    /// 长¤
    /// </summary>
    public double Height
    {
        get { return _height; }
        set { _height = value; }
    }
    public abstract double getArea();//抽é象ó方?法ぁ?
}
/// <summary>
/// 圆2类え?
/// </summary>
class Circle : Shape
{
    public Circle(double r)
    {
    this.Height=r;
        this.Width=r;
    }
    /// <summary>
    /// 计?算?圆2的?面?积y
    /// </summary>
    /// <returns></returns>
    public override double getArea()
    {
        return this.Height * this.Width*Math.PI;
    }

}
class Square : Shape
{
    public Square(double w,double h)
    {
        this.Height = h;
        this.Width = w;
    }
    /// <summary>
    /// 计算正方形的面积
    /// </summary>
    /// <returns></returns>
    public override double getArea()
    {
        return this.Height * this.Width;
    }

}

}

Abstract

//抽象类不能被实例化
//如果一个类中有任何抽象成员,那么这个类也必须是抽象类abstract class
//子类继承抽象类后,必须重写父类中的所有抽象成员,除非子类也是一个抽象类
//抽象成员在抽象类中不能有任何实现。
//抽象类中可以有抽象成员也可以有非抽象成员.

学习ToString()方法、Equals()来自于Object,任何类都有,通过override有了不同的实现(举例,自己的类实现ToString())

tatic void Main(string[] args)
{

        Circle c1 = new Circle(10);
        Console.WriteLine(c1.ToString());
        Console.ReadKey();
    }

这样黑框显示:
在这里插入图片描述

因为:
To.string我们没写这个方法但是显示,是因为任何类继承object的tostring
即abstract class Shape:Object //不写,默认继承了。
那么这个cricle继承object么
class Circle : Shape
C#中是单继承,在这里circle是单继承,类的继承也是两个东西的关系。Object继承给shape,而shape继承给circle。
在这里插入图片描述

Tostring原来是个virtual虚方法,而子类未重写标记为virtual的tostnig方法?????默认吊的object的实现,所以返回的是这个 类型名称。
所以他就指指向了上图的。

如果不想

我们进行对tostring的重写
public override string ToString()

    {
        //return base.ToString();
        return getArea().ToString();
    }

输出正确。

思考:父类到底要不要写成抽象类?

看实际情况,父类不会被实例化的的时候不用。抽象类就是让子类去继承的,自己本身么有用。

抽象类的意义:不能从抽象类创建对象,它的意义在于被扩展。代码重用、多态(简化了is DataType的判断)。

普通类的继承能实现多态吗?

方法重写的意义(最终的意义就是多态):为所有子类定义了某种规范(某种必须有的规范),多态。//这里的规范可以理解为”行为“,就是方法。//以后用到得接口等中提到的规范,其实目的就是让新增加的类必须具有某些方法,这样才能满足我们程序中的要求。(对程序扩展做了一定的约束。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值