博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

接口 抽象类 应用不同与区别

 应用不同:

1、如果所有抽象出的方法不确定性很高,就定义为接口来封装,所有方法抽象,由实现类全部实现
2、如果部分抽象出的方法不确定性很高,就定义为抽象类来封装,能确定的方法实现,不确定的方法抽象,由实现类部分实现,部分重写(不变就不重写啦)
3、如果所有抽象出的方法确定性很高,就定义为基础类,所有方法提供基本实现,由子类去重写(不变就不用写子类啦)

抽象方法 虚方法应用不同:

用我自己的话说,
抽象方法用abstract修饰
不允许有方法体
必须被子类override
只能在抽象类中


虚方法用virtual修饰
要有方法体,哪怕是一个分号
可以被子类继承或者override
除了密封类外都可以写
如  
  
public    abstract    class    AUser  

 {  
         
  public    abstract    UserInfo    getUser();  
   
  public    virtual    void    Save(UserInfo    info) 

   {  
                  
//实现保存的功能  
          
}  
  
}  
   
  
public    class    UserSqlServer:AUser  
  
{  
          
public    override    UserInfo    getUser()  
 
{  
                    
//一定要实现的,抽象类只给了抽象方法 
}  
          
//假设抽象类针对SqlServer实现的功能,这里不需要实现了. 
 }  
   

public    class    UserOracle:AUser  

 {  
         
  public    override    UserInfo    getUser()  
    
       {  
          
           //一定要实现的,抽象类只给了抽象方法  
 
       }  
          
//假设抽象类针对Oracle实现的功能
  
public override void Save(UserInfo info)
 
      {  
                    
//覆盖抽象类中的Save方法  
         
  }  
  
}  
  
以上只是例子,真实并不这么做.