• 抽象类和接口的异同及实例解析


    与具体类比较

    1. 抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
    2. 允许(但不要求)抽象类包含抽象成员。
    3. 抽象类不能被密封。

    与接口比较

    抽象类表示该类中可能已经有一些方法的具体定义,但是接口就仅仅只能定义各个方法的界面(方法名,参数列表,返回类型),并不关心具体细节。
    接口是引用类型的,和抽象类的相似之处有三点:
    1. 不能实例化;
    2. 包含未实现的方法声明;
    3. 派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)。
    抽象类与接口紧密相关。然而接口又比抽象类更抽象,这主要体现在它们的差别上:
    1. 类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。
    2. 抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。
    3. 抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。
    4. 抽象类是对象的抽象,然而接口是一种行为规范。

    实例:

      1     #region 星探-美女
      2     /// <summary>
      3     /// 好身材美女
      4     /// </summary>
      5     public interface IGoodBodyGirl
      6     {
      7         /// <summary>
      8         /// 好面孔
      9         /// </summary>
     10         void NiceFace();
     11         /// <summary>
     12         /// 好身材
     13         /// </summary>
     14         void NiceFigure();
     15     }
     16     /// <summary>
     17     /// 好气质美女
     18     /// </summary>
     19     public interface IGreatTemperamentGirl
     20     {
     21         /// <summary>
     22         /// 好气质
     23         /// </summary>
     24         void GreatTemperament();
     25     }
     26 
     27     public interface IPettyGirl
     28     {
     29         /// <summary>
     30         /// 好面孔
     31         /// </summary>
     32         void NiceFace();
     33         /// <summary>
     34         /// 好身材
     35         /// </summary>
     36         void NiceFigure();
     37         /// <summary>
     38         /// 好气质
     39         /// </summary>
     40         void GreatTemperament();
     41     }
     42 
     43     public class PettyGirlNew : IPettyGirl
     44     {
     45         private string name { get; set; }
     46         public PettyGirlNew(string name)
     47         {
     48             this.name = name;
     49         }
     50         public void GreatTemperament()
     51         {
     52             Console.WriteLine($"{this.name},很有气质!");
     53         }
     54 
     55         public void NiceFace()
     56         { 
     57             Console.WriteLine($"{this.name},脸蛋很漂亮!");
     58         }
     59 
     60         public void NiceFigure()
     61         {
     62             Console.WriteLine($"{this.name},身材很棒!");
     63         }
     64     }
     65 
     66     public class PettyGirl : IGoodBodyGirl, IGreatTemperamentGirl
     67     {
     68         public string name { get; set; }
     69         public PettyGirl(string name)
     70         {
     71             this.name = name;
     72         }
     73         public void GreatTemperament()
     74         {
     75             Console.WriteLine($"{this.name},很有气质!");
     76         }
     77 
     78         public void NiceFace()
     79         { 
     80             Console.WriteLine($"{this.name},脸蛋很漂亮!");
     81         }
     82 
     83         public void NiceFigure()
     84         {
     85             Console.WriteLine($"{this.name},身材很棒!");
     86         }
     87     }
     88      
     89     public abstract class AbstractSearcher
     90     {
     91         public IPettyGirl pettyGirl { get; set; }
     92         public AbstractSearcher(IPettyGirl pettyGirl)
     93         {
     94             this.pettyGirl = pettyGirl;
     95         } 
     96         public abstract void Show(); 
     97     }
     98 
     99     public class Searcher : AbstractSearcher
    100     {
    101         public Searcher(IPettyGirl pettyGirl) : base(pettyGirl)
    102         { 
    103         } 
    104         public override void Show()
    105         {
    106             Console.WriteLine($"美女信息如下:");
    107             base.pettyGirl.NiceFace();
    108             base.pettyGirl.GreatTemperament();
    109             base.pettyGirl.NiceFigure();
    110         }
    111     }
    112 
    113     #endregion
  • 相关阅读:
    随机数表示方法
    何时用重定向何时用转发
    http中重定向和请求转发
    Java正则表达式
    自定义圆形的ProgressBar
    Android内存管理机制
    Android 安全机制
    8位颜色值的含义
    Shape使用
    Bitmap(三)
  • 原文地址:https://www.cnblogs.com/LandWind/p/10001064.html
Copyright © 2020-2023  润新知