黑马程序员技术交流社区

标题: interface和abstract class区别 [打印本页]

作者: 魏振龙    时间: 2012-7-6 16:52
标题: interface和abstract class区别
interface和abstract class如何使用(最好有个例子)
作者: 许庭洲    时间: 2012-7-6 17:14
1,只提供一些方法规约,不提供方法主体,可有参数;
interface 例子:
public interface IPerson
{
   IPerson();                    //wrong
   string name;                //wrong
   public void getIDcard();//wrong

   void getName();           //right
   void getAge(string s);    //right
}
public class Chinese:IPerson
{
   public Chinese(){}                   //构造函数
   public void getName(){}           //实现getName()
   public void getAge(string s){}   //实现getAge()
}

2,抽象类不能直接实例化,必须由其派生类实现。
public abstract 例子
public abstract class Book
{
  public abstract void getPrice();      //抽象方法,不含主体
}
public class EnglishBook:Book
{
      public override void getPrice()   //实现抽象方法,必须在继承类中实现
      {
           Console.WriteLine("this is a test:EnglishBook override abstract getPrice()");
      }
}
作者: 魏振龙    时间: 2012-7-6 17:41
许庭洲 发表于 2012-7-6 17:14
1,只提供一些方法规约,不提供方法主体,可有参数;
interface 例子:
public interface IPerson

大概看懂了 谢谢了
作者: 孙宁宇    时间: 2012-7-6 17:58
在C#的使用上 抽象类只能又一个 接口可以多个使用
如果同时使用的话要先继承抽象类 后面跟接口 例如: class A:abstract class,interface

作者: 肖琦    时间: 2012-7-6 20:29
接口、类、抽象类

实例化角度:普通类可以被实例化,接口和抽象类不能被实例化;

继承角度:类,抽象类,接口都可以被其他类继承(接口被实现说法标准点);
        继承类需要满足 is  a  的关系,比如 猫 继承 动物,猫 is a 动物;
        继承(实现)接口要满足 has a 的关系,接口更强调的是一种能力,(从英语的角度看微软提供的接口一般都是形容词,类通常是名词),比如 飞机会飞,鸟也会飞,谁继承谁都不好,他们的共同点是飞,可以说成 飞机 has a 飞able ,鸟 has a 飞able,这样讲就会合乎实际,会与生活接近点,面向对象语言的特点就是抽象生活(扯远了)

多态角度:继承为多态提供了条件,其实继承是两种:父子类和接口(个人理解);父子类为类之间建立了很直接的关系;接口则为不同类型的事物提供某种能力上的相似,在相似的基础上更好的服务好应用程序

后面的多态说得太抽象,自己也没有很好的例子,都是个人的一些小体会,不对的希望指出
作者: 谢栋文    时间: 2012-7-7 06:52
首先最重要的一点,接口与抽象类的最终目的是为了实现多态-------在一定程度单独的继承已经满足不了多态的实现(比如:不同系列,多继承等)
抽象类是对具有继承关系(属于同一系列)的高度抽象。。因为你无法定义相关功能的具体实现。
而接口则是对具有相同功能却不是同一系列的高度抽象(可以理解为对功能的抽象,也叫功能约束),相对于抽象类,接口更具有灵活性、可扩展性更强,
由此又有了面向对象中的面向接口编程-----现在面向对象中最流行的编程思维,但是这些与设计模式等的前提思想就是为了更好的实现多态!!!!
在两者成员的定义上,这两者也存在很大的不同处------网上一大堆。。。这需要楼主慢慢去体会!
以上是我的理解,希望对楼主有所帮助
作者: 刘旺    时间: 2012-7-7 11:15
abstarct class在C#语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应该是相同的。对于interface 来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。 例子你可以看这篇文章http://hi.baidu.com/jatosi/item/60e278cc4343963098b49895
作者: 戴水平    时间: 2012-7-7 11:42
抽象类和接口都是一些方法的定义没有实现,但是有区别:
抽象类可以定义一些属性,字段,子类接口继承属性(定义的非私有的),以及实现抽象类的方法
接口只能定义一些没有实现的方法,不能定义其他的属性 ,成员子类只要实现接口的方法

作者: 小高    时间: 2012-7-8 11:35
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
作者: 侯慧杰    时间: 2012-7-8 15:43
简单的说:抽象类中可以有属性也可以有方法的实现,但是接口中只有方法而没有属性,在类中一旦把某个方法定义称抽象方法,则这个类就必须定义为抽象类




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2