zoukankan      html  css  js  c++  java
  • C#基本语法学习(六)

    抽象类和密封类

      在定义类时可以使用abstract关键字声明这个类是抽象的。抽象类不能被实例化,即不能创建抽象类的实例。抽象类的主要作用是充当其他类的基类。

      密封类的概念刚好与抽象类相对,这种类不能充当别的类的基类。“密封”的概念是不可以从这个类派生出别的类。在定义类时用sealed关键字指明类是密封的。

      下面声明两个类,一个抽象类,一个密封类。

    1 public abstract class Shape  //抽象类
    2 {
    3     ////        
    4 }
    5 
    6 public sealed class Rectangle:Shape  //密封类
    7 {
    8     
    9 }

      如果违反抽象类和密封类的规定,试图创建一个抽象类的实例或是试图从一个密封类派生出另外一个类,都会受到一个编译错误。

      抽象类中可以包含一种特殊的方法即抽象方法。抽象方法只有方法签名,没有方法体。声明抽象方法的语法如下:

      访问修饰符 abstract 返回值类型 方法名(参数列表);

      抽象方法只能包含在抽象类中,而且派生类必须重写父类中的抽象方法。抽象方法不能不含方法体,甚至不能包含大括号{},必须在参数列表后面直接跟分号。

     1     public abstract class Shape
     2     {
     3         public abstract double calculateArea();
     4     }
     5 
     6     public sealed class Triangle:Shape
     7     {
     8         private double edge, high;
     9         public Triangle(double e, double h)
    10         {
    11             edge = e;
    12             high = h;
    13         }
    14 
    15         public override double calculateArea()
    16         {
    17             return edge * high / 2;
    18         }
    19     }
    20     public sealed class Rectangle:Shape
    21     {
    22         private double length, width;
    23         public Rectangle(double l, double w)
    24         {
    25             length = l;
    26             width = w;
    27         }
    28 
    29         public override double calculateArea()
    30         {
    31             return length * width;
    32         }
    33     }
    34 
    35     public sealed class Circle:Shape
    36     {
    37         private double radius;
    38         public Circle(double r)
    39         {
    40             radius = r;
    41         }
    42 
    43         public override double calculateArea()
    44         {
    45             return Math.PI * radius * radius;
    46         } 
    47     }
    48 
    49         static void Main(string[] args)
    50         {
    51             Shape s;
    52 
    53             s = new Triangle(10, 15);
    54             printArea(s);
    55             s = new Rectangle(10, 15);
    56             printArea(s);
    57             s = new Circle(10);
    58             printArea(s);
    59 
    60             Console.ReadLine();
    61         }
    62 
    63         static void printArea(Shape s)
    64         {
    65             Console.WriteLine("这个图形是: " + s.GetType().ToString());
    66             Console.WriteLine("这个图形的面积是: " + s.calculateArea().ToString());
    67         }
    68     }

      运行结果

    这个图形是: ShapeExample.Triangle
    这个图形的面积是: 75
    这个图形是: ShapeExample.Rectangle
    这个图形的面积是: 150
    这个图形是: ShapeExample.Circle
    这个图形的面积是: 314.159265358979
  • 相关阅读:
    面向对象-对象的内存图
    面向对象-类与对象的关系
    部署Ambari Server实战案例
    面向对象介绍
    基础语法-二维数组的基本使用
    基础语法-无序/有序数组中元素的查找
    常见数据结构与算法-冒泡排序
    常见数据结构与算法-选择排序
    基础语法-数组的常见问题及常见操作
    基础语法-数组的内存分配
  • 原文地址:https://www.cnblogs.com/numbqq/p/5287654.html
Copyright © 2011-2022 走看看