zoukankan      html  css  js  c++  java
  • 静态类和静态方法,抽象类和抽象方法,new关键字,值类型和引用类型,接口

    静态类和静态方法:静态成员是与类相关,而非实例相关;普通类中的静态成员:1.只能通过类名访问。2.静态方法中只能访问静态成员,或通过对象访问实例成员。3.多个对象共享同一个成员。静态类(一般用作工具类):1.Math,console等都是静态类。2.静态类中只能包含静态成员。注意:少使用静态类,静态类、静态成员所分配的内存在程序退出时才会释放。静态类的本质abstract(不能被实例化)+sealed(不能被继承)。

    多态:多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征。多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。实现多态的方式:virtual,abstract,接口。
     
    抽象类:抽象类不能被实例化。抽象类中可以有普通成员。抽象类存在的意义:1.抽象类不能被实例化,只能被其他类继承2.继承抽象类的子类必须把抽象类中的所有抽象成员都重写(实现)(除非子类也是抽象类。)3.抽象类就是为了重写→多态(代码重用)。4.抽象类中可以有实例成员也可以有抽象成员。
     
    抽象类的例子:计算形状Shape(圆Circle,矩形Square ,正方形Rectangle)的面积、周长。
    复制代码
    class Program
        {
            #region 计算形状Shape(圆Circle,矩形Square?,正方形Rectangle)的面积、周长
    
    
            #endregion
            static void Main(string[] args)
            {
                Circle c = new Circle(3);
                double circleArea = c.area();
                Console.WriteLine(circleArea );
                Square s = new Square(4,3);
                double squareArea = s.area();
                Console.WriteLine(squareArea);
                Rectangle r = new Rectangle(5);
                double rectangelArea = r.area();
                Console.WriteLine(rectangelArea);
                Console.ReadKey();
            }
        }
        /// <summary>
        /// 形状的抽象类
        /// </summary>
        public abstract class Shape
        {
            public abstract double area();
            public abstract double circumference();
        }
        /// <summary>
        /// 圆形类,继承自形状类,重写抽象方法
        /// </summary>
        public class Circle : Shape
        {
            public Circle(double radius)
            {
                this.radius = radius;
            }
            double radius;
    
            public double Radius
            {
                get { return radius; }
                set { radius = value; }
            }
            public override double area()
            {
                return Math.PI * this.Radius * this.Radius;
            }
    
            public override double circumference()
            {
                return 2 * Math.PI * this.Radius;
            }
        }
        /// <summary>
        /// 矩形类,继承自形状类,重写抽象方法
        /// </summary>
        public class Square : Shape
        {
            public Square(double length, double width)
            {
                this.length = length;
                this.width = width;
            }
            double length;
    
            public double Length
            {
                get { return length; }
                set { length = value; }
            }
            double width;
    
            public double Width
            {
                get { return width; }
                set { width = value; }
            }
    
            public override double area()
            {
                return this.Width * this.Length;
            }
    
            public override double circumference()
            {
                return 2 * (this.Width + this.Length);
            }
        }
        /// <summary>
        /// 正方形类,继承自形状类,重写抽象方法
        /// </summary>
        public class Rectangle : Shape
        {
            public Rectangle(double l)
            {
                this.length = l;
            }
            double length;
    
            public double Length
            {
                get { return length; }
                set { length = value; }
            }
    
            public override double area()
            {
                return Length * Length;
            }
    
            public override double circumference()
            {
                return 4 * Length;
            }
        }
    复制代码

    虚方法与抽象方法:

    虚方法:

    •1.父类中必须有实现。
    •2.子类中可以不重写。
    •3.虚方法可以在普通类中。(有序方法的类是可以(可能)被实例化的。)
    抽象方法:
     
    •1.父类中不能有任何实现。
    •2.子类中必须重写(除非:子类也是一个抽象类。)
    •3.抽象方法必须在抽象类中。
     
    值类型与引用类型:值类型均隐式派生自System.ValueType:数值类型、bool、结构、枚举。引用类型派生自System.Object:字符串、数组、类、接口等。引用类型变量的赋值只复制对对象的引用。值类型变量赋值会拷贝一个副本。
     
    接口:接口的例子:
    复制代码
    class Program
        {
            #region 橡皮rubber鸭子、木wood鸭子、真实的鸭子realduck。三个鸭子都会游泳,而橡皮鸭子和真实的鸭子都会叫,只是叫声不一样,橡皮鸭子“唧唧”叫,真实地鸭子“嘎嘎”叫,木鸭子不会叫.把抽象类变成接口。
    
            
            #endregion
            static void Main(string[] args)
            {
                Ibark realduck = new RealDuck();
                //realduck.bark();
                Bark(realduck);
                Console.ReadKey();
            }
            public static void   Bark(Ibark bark)
            {
                bark.bark();
            }
        }
        interface Ibark
        {
            void bark();
        }
        interface Iswim
        {
            void swim();
        }
        public class RubberDuck:Iswim ,Ibark 
        {
    
            public void swim()
            {
                Console.WriteLine("橡皮鸭会游泳");
            }
    
            public void bark()
            {
                Console.WriteLine("唧唧");
            }
        }
        public class WoodDuck : Iswim
        {
    
            public void swim()
            {
                Console.WriteLine("我是木鸭,我只会游泳不会叫");
            }
        }
        public class RealDuck : Iswim, Ibark
        {
    
            public void swim()
            {
                Console.WriteLine("我是真鸭子,我会游泳");
            }
    
            public void bark()
            {
                Console.WriteLine("嘎嘎,我会叫");
            }
        }
    复制代码

    接口特点总结:

    1.接口是一种规范。为了多态。
    2.接口不能被实例化。
    3.接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改。(默认为public)
    4.接口中的成员不能有任何实现。
    5.接口中只能有方法、属性、索引器、事件,不能有“字段”。
    6.接口与接口之间可以继承,并且可以多继承。
    7.实现接口的子类必须实现该接口的全部成员。
    8.一个类可以同时继承一个类并实现多个接口。
    9.当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract。(抽象类也能实现接口,用abstrac标记)
    10.“显示实现接口”,只能通过接口变量来调用(因为显示实现接口后成员为private)。
  • 相关阅读:
    Redis为什么要自己实现一个SDS
    Redis中的数据结构
    编程题
    设计模式-代理模式
    设计模式-原型模式
    设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
    Redis基础
    Windows提高_1.4进程通信
    Windows提高_1.3文件操作
    Windows提高_1.2遍历进程、遍历模块
  • 原文地址:https://www.cnblogs.com/alsw/p/3240513.html
Copyright © 2011-2022 走看看