面向对象程序设计核心内容小总结

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

  现实生活中的类是人们对客观对象不断认识而产生的抽象的概念,而对象则是现实生活中的一个个实体。类 (class) 是对象的“模板”或者“蓝图”,同时定义了对象的特性和操作,通过该模板可以创建很多具有类型特性的“对象”。类本质上是一种数据类型,这种数据类型将数据与对数据的操作做为一个统一的整体来定义,类的这种特点叫封装性。

类的成员有两种:存储数据的成员和操作数据的成员。存储数据的成员叫“字段”,操作数据的成员有很多,主要有“属性”、“方法”、“构造函数”等。具体代码实现如下:

class Cuboid   // 类名为Cuboid
{   // 声明字段
    private double length;
    private double width;
    private  double high;
    // 声明属性
    public double Length { get { return length; } set { length = value; } }
    public double Width { get { return width; } set { width = value; } }
    public double High { get { return high; } set { high = value; } }
    //声明方法
    public double Volume()//求体积
    {
return length*width*high;
    }
    //声明构造函数
    public Cuboid(double l,double w,double h)
    {
length=l;
width=w;
high=h;
    }
}
在类中有一种特殊的成员叫做静态数据成员,静态数据成员不属于任何一个特定的对象,而是属于类,或者说属于全体对象,是被全
体对象共享的数据。
class Cuboid
{private static int cuboidNumber ; 
//静态字段,用于统计长方体对象
    private double length;
    private double width;
    private double high;
    //静态方法,只能调用静态成员
     public static int GetCuboidNumber( )
     {return cuboidNumber;}
}
类的继承性是指在进行类的定义时,不需要编写代码就可以包含另一个类的数据成员、属性成员、方法成员等。但也可以定义自己类 中特有的成员。在类的继承中,被继承的类叫做基类或者父类,继承的类叫做派生类或者子类。类的继承具有单根性和传递性。以上 面提到的长方体类(Cuboid)为基类,写一个派生类——正方体类(Cube),代码为:
public class Cube : Cuboid
{
    public double CubeCubage()
    {
      // 注意这里使用的是基类定义中的公有成员
       return Length * Length * Length;
    }
}

子类并不继承父类的构造函数,子类默认调用父类中无参的构造函数。当父类已经声明了带参数的构造函数,子类需要显示地调用父 类的构造函数,具体实现:
如果前面的Cuboid类中增加有参的构造函数:
public Cuboid(double l, double w, double h)
        { length = l; width = w; high = h; }
则其派生类Cube则也必须声明构造函数:
 public Cube(double l) : base(l, 0, 0) { }
里氏转换:1.子类可以赋值给父类(如果需要一个父类,那么可以给一个子类代替);2.如果父类对象装的是子类对象,可以转换为对 应的子类。
访问修饰符: public:访问控制修饰符,访问控制修饰符可以是public、protected、private、internal。通常都使用public以保证类的开放性,类定义 的访问控制默认为是internal。
类的多态:一个对象表现出多种类型。实现多态的3中方法:1.虚方法;2.抽象方法;3.接口。
1.虚方法:(子类重写父类中定义的方法。父类方法:virtual,子类方法:override)
class Duck
    {
        public virtual void Bark()
        {
            Console.WriteLine("嘎嘎");
        }
    }
    class MoodDuck:Duck
    {
        public override void Bark()
        {
            Console.WriteLine("咯咯");
        }
    }
    class PlasticDuck:Duck
    {
        public override void Bark()
        {
            Console.WriteLine("唧唧");
        }
    }
2.抽象类:
public abstract class Graph//抽象类与抽象方法需要用关键字abstract
    {
        public abstract double Area();
        public abstract double Girth();
    }


    public class Circle : Graph
    {
        public double Radius
        {
            get;
            set;
        }
        public Circle(double radius)
        {
            this.Radius = radius;
        }
        public override double Area()
        {
            return Math.PI * this.Radius * this.Radius;
        }


        public override double Girth()
        {
            return 2 * Math.PI * Radius;
        }
    }


    public class Reactangle : Graph
    {
        public double Chang
        {
            get;
            set;
        }
        public double Kuan
        {
            get;
            set;
        }
        public Reactangle(double c, double k)
        {
            this.Chang = c;
            this.Kuan = k;
        }
        public override double Area()
        {
            return this.Chang * this.Kuan;
        }


        public override double Girth()
        {
            return 2*(this.Chang+this.Kuan);
        }
    }
3.接口:(接口代表一种规范或者能力)
public interface IRun
    {
        void Run();
    }
    public interface IFlyable
    {
        void Fly();
    }
    public interface ISwimming
    {
        void Swim();
    }
    public interface ISuperMan:IRun,IFlyable,ISwimming
    { 
        
    }
public class Student : ISuperMan
    {
        public void Run()
        {
            Console.WriteLine("学生会跑步");
        }


        public void Fly()
        {
            Console.WriteLine("学生会飞");
        }


        public void Swim()
        {
            Console.WriteLine("学生会游泳");
        }
    }

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------


你可能感兴趣的:(.net技术学习,面向对象,.net,类,继承,多态)