黑马程序员技术交流社区

标题: 黑马程序员 初学者,求解答:抽象和接口的相同点? [打印本页]

作者: 北极雪871208    时间: 2014-3-16 09:58
标题: 黑马程序员 初学者,求解答:抽象和接口的相同点?
本帖最后由 北极雪871208 于 2014-3-16 17:45 编辑

---------------------- <a target="blank">ASP.Net+Unity开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------

抽象和接口的相同点?
---------------------- <a target="blank">ASP.Net+Unity开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<a  target="blank">http://edu.csdn.net</a>
作者: 周定宁    时间: 2014-3-16 10:23
抽象类和接口的相同和异同点 
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。 
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。 
在编写对象的时候会对一些类的方法进行定义。但是并没有具体的实现。而是把它们放到子类中去实现,具有灵活性。在抽象类中可以有抽象方法,也可以没有抽象方法。但是有了抽象方法的类一定是抽象类。 
抽象类和接口在JAVA中都是用来表述抽象类的。 
在面向对象的概念,所以的对象都是通过类来描述的。但反之则不行。若是一个类中没有包含足够的信息描绘一个具体的对象,这个的类就是抽象类。 
在JAVA中除了使用抽象类来实现一定程度的抽象外还可以定义一种特殊的抽象方法----接口(interface)。和抽象类的方法不一样,在抽象类中需要加上关键字abstract来表明某个方法是抽象的,但是在接口中则不需要。 
  
相同点: 
1.他们都能不能生成实例,都有抽象方法。 2接口是特殊的抽象类。 
3.接口和抽象类的继承都使用的关键字是extends。 
  
不同点: 
1.接口的定义的变量默认是public static final型,且必须给其赋初值。所以在实现类中不能重新定义,也不能改变其值。而在抽象类中其值在子类中可以重新定义也可以重新赋值。 
2.接口的方法默认的都是public abstract类型的。 
3.抽象类中可以有构造器,但是接口中除了抽象方法什么都没有。 4.名字不同,接口写的是public interface  Shape{}; 而抽象类写的是public  abstract class Shape{}; 
接口里全部都是抽象方法。而抽象类里可以有抽象方法也可以有其他的方法。接口里的属性都是静态的。但是抽象类的属性可以是任意的。 
5.还可以从继承的角度看,接口可以多继承,一个接口可以继承多个接口。但是抽象类却不能,只能是继承一个父类,不能继承多个父类。要是能继承多个父类的话会在父类和子类的方法中有发生冲突。 

作者: 黄飞1991    时间: 2014-3-16 10:26
接口与抽象类
  共  性:
            都是不断抽取出来的抽象的概念
  
  区别 1:
            抽象类体现继承关系,一个类只能单继承
  接口体现实现关系,一个类可以多实现
  
  区别 2:
            抽象类是继承,是 "is a "关系
  接口是实现,是 "like a"关系
  
  区别 3:
            抽象类中可以定义非抽象方法,供子类直接使用
  接口的方法都是抽象,接口中的成员都有固定修饰符
  

作者: 王国库    时间: 2014-3-16 15:18
简单来说,接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的.
另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。 还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
作者: chaos    时间: 2014-3-16 17:53
抽象类:
  用abstract关键字来修饰一个类时,这个类叫做抽象类。用abstract来修饰一个方法时,这个方法叫抽象方法
  含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写
  抽象类不能被实例化
  抽象方法只需声明不需要实现
接口:
  接口是抽象方法和常量值的定义的集合
  从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
  多个无关的类可以实现同一个接口
  一个类可以实现多个无关的接口
  与继承关系类似,接口与实现类之间存在多态性
  接口中只能定义抽象方法,这些方法默认为public
  接口可以继承其他接口,并添加新的属性和抽象方法
接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
接口可以多继承,抽象类不行
接口定义方法,不能实现,而抽象类可以实现部分方法。




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