zoukankan      html  css  js  c++  java
  • 接口与抽象类的区别

     看懂接口与抽象类的区别:

      

    namespace ConsoleApp1
    {
        public class A : A_A, I_A, I_B
        {
            public int CountB { get; set; }
    
            public void MethodA()
            {
                var NumA = 1;
                var a = base.NumA;
                var msg = base.GetString_AA();
                var v_Msg = base.GetString_V_AA();
    
                //错误:接口和抽象类不能被实例化
                A_A a_A = new A_A();
                I_A i_A = new I_A();
            }
    
            public override string GetString_V_AA()
            {
                if (CountA == 1)
                    return base.GetString_V_AA();
                else
                    return "MySelf";
            }
    
            public override void GetList()
            {
                throw new System.NotImplementedException();
            }
        }
    
        public class B:A
        {
            public void Test()
            {
                base.GetString_V_AA();
            }
        }
    
        public abstract class A_A:I_A
        {
            public A_A()
            {
    
            }
            public int NumA { get; set; }
            public int CountA { get; set; }
    
            public virtual string GetString_V_AA()
            {
                return "AA.GetString_V_AA";
            }
            public abstract void GetList();
    
            public string GetString_AA()
            {
                return "AA.GetString_AA";
            }
    
            public void SetCountA(int value)
            {
                throw new System.NotImplementedException();
            }
        }
        public abstract class A_B
        {
            public int NumB { get; set; }
        }
        public interface I_A
        {
            int CountA { get; set; }
            void SetCountA(int value);
        }
        public interface I_B
        {
            int CountB { get; set; }
            //void SetCountB(int value);
        }
    
    }

      相同:

        1、接口和抽象类都可以被继承。

        2、接口和抽象类都不能被实例化。

        3、接口和抽象类都可以包含方法、字段、属性等声明。

        4、接口和抽象类的子类必须实现未实现的方法,抽象类必须实现抽象方法,普通方法无需实现,接口必须实现。

      异同:

        1、抽象类可以有构造方法,接口中不能有构造方法。

        2、抽象类中可以包含静态方法,接口中不能包含静态方法。

        3、一个类可以实现多个接口,但只能继承一个抽象类。

        4、如果抽象继承接口,那么抽象内中必须实现接口成员,抽象类的子类就算也继承了抽象类的接口,那么子类不必实现接口。

  • 相关阅读:
    SQL Server 2005中 with as 使用介绍
    论信息系统项目的整体管理
    自定义控件的使用以及与用户控件的区别
    Sql Server2005 TransactSQL 新兵器学习总结之DDL触发器
    我的大学系分之路
    C#序列化与反序列化(Serializable and Deserialize)
    父子节点树形数据输出
    自定义枚举类型注释属性,并在程序中获取
    SSAS没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 解决办法
    对ASP.NET网站的服务器端压缩
  • 原文地址:https://www.cnblogs.com/liubaojing/p/11436394.html
Copyright © 2011-2022 走看看