A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王勇 于 2014-5-28 18:28 编辑

最近,被构造函数整的有点乱,尤其是学完继承继承以后,今天又看了接口就更乱了,哪位大神可以给系统及讲解一下,分享一下,谢谢啦····················

5 个回复

倒序浏览
没有,接口和抽象类都不可以实例化。接口必须让实现它的子类实现它的方法
回复 使用道具 举报
构造方法有下面的两个作用:1、创建对象2、初始化。接口是不可以实例化的不可以建立对象。接口中没有构造函数,接口中的成员修饰符是固定的。成员常量:public static final,成员函数:public abstract。接口中的方法是抽象方法。而构造方法是不可以为abstract类型的。所以
回复 使用道具 举报
  1. ---------------------------------------------------------------------------------------
  2.                               接口                                 抽象类                                 类
  3. 标志                           interface                              abstract class                      class
  4. 如何继承                  implements                      extends                              extends
  5. 可以继承自                  接口                              抽象类,类                              抽象类,类
  6. 可以实现自                  无                                      一个或多个接口                       一个或多个接口
  7. 有否成员变量          只有static final成员              均可                                       均可
  8. 是否有构造函数          无                                      有                                       有
  9. 可否实例化                  不可                              不可                                   可
  10. 意图                          规范行为,强制实现              继承成员+规范行为,               继承成员
  11.                                                               强制实现
  12. ----------------------------------------------------------------------------------------
复制代码


看看 这个希望对你 有帮助!!
回复 使用道具 举报
927233671 发表于 2014-5-23 14:42
没有,接口和抽象类都不可以实例化。接口必须让实现它的子类实现它的方法 ...

谢谢·············明了····
回复 使用道具 举报
本帖最后由 gentleman 于 2014-5-23 20:46 编辑

1、抽象类是可以有构造函数的。但很多人认为,构造函数用于实例化一个对象(或建立一个对象的实例),而抽象类不能被实例化,所以抽象类不应该有公共的构造函数(FxCop.设计规则)。但不应该有“公共”的构造函数,和不应该有构造函数,这是两个不同的概念,所以,FxCop.设计规则中也说,如果抽象类需要构造函数,那么应该声明为“protected”。

2、既然抽象类是可以,甚至有时候应该有构造函数,那抽象类的构造函数的作用是什么?我觉得至少有两个:

(1)初始化抽象类的成员;

(2)为继承自它的子类使用。

比如以下例子:


  1. public abstract class Component
  2. {
  3.         protected string name;

  4.         private Component(string name)
  5.         {
  6.             this.name = name;
  7.         }

  8.         public abstract void Add(Component component);
  9.         public abstract void Remove(Component component);   
  10. }

  11. public class Composite : Component
  12. {
  13.        private List<Component> children = new List<Component>();

  14.         public Composite(string name)
  15.             : base(name)
  16.         { }
  17.                
  18.         public override void Add(Component component)
  19.         {
  20.             this.children.Add(component);
  21.         }

  22.         public override void Remove(Component component)
  23.         {
  24.             this.Remove(component);
  25.         }        
  26. }
复制代码



3、即使我们声明一个没有构造函数的抽象类,编译器还会为我们生成一个默认的保护级别的构造函数。子类实例化时(不管是否为带参构造)只会调用所有父类的无参构造函数,而带参构造必须通过显式去调用.调用顺序是先调用抽象类的无参构造函数,如果子类实例化时是使用带餐的构造函数,则再接着调用抽象类的带参构造函数,最后调用子类本身的构造函数。


接口中没有构造函数

接口中不能定义构造器的理由:
1. 构造器用于初始化成员变量,接口没有成员变量
2. 类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器链的调用次序
3. 构造器是属于类自己的,不能继承。因为是纯虚的,接口不需要构造器。
————————————————————————————————————————————引用自网络
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马