黑马程序员技术交流社区
标题:
各位大神请教一下,接口中是否也存在构造函数???
[打印本页]
作者:
王勇
时间:
2014-5-23 14:37
标题:
各位大神请教一下,接口中是否也存在构造函数???
本帖最后由 王勇 于 2014-5-28 18:28 编辑
最近,被构造函数整的有点乱,尤其是学完继承继承以后,今天又看了接口就更乱了,哪位大神可以给系统及讲解一下,分享一下,谢谢啦····················
作者:
927233671
时间:
2014-5-23 14:42
没有,接口和抽象类都不可以实例化。接口必须让实现它的子类实现它的方法
作者:
木华
时间:
2014-5-23 15:00
构造方法有下面的两个作用:1、创建对象2、初始化。接口是不可以实例化的不可以建立对象。接口中没有构造函数,接口中的成员修饰符是固定的。成员常量:public static final,成员函数:public abstract。接口中的方法是抽象方法。而构造方法是不可以为abstract类型的。所以
作者:
武维京
时间:
2014-5-23 15:43
---------------------------------------------------------------------------------------
接口 抽象类 类
标志 interface abstract class class
如何继承 implements extends extends
可以继承自 接口 抽象类,类 抽象类,类
可以实现自 无 一个或多个接口 一个或多个接口
有否成员变量 只有static final成员 均可 均可
是否有构造函数 无 有 有
可否实例化 不可 不可 可
意图 规范行为,强制实现 继承成员+规范行为, 继承成员
强制实现
----------------------------------------------------------------------------------------
复制代码
看看 这个希望对你 有帮助!!
作者:
王勇
时间:
2014-5-23 17:03
927233671 发表于 2014-5-23 14:42
没有,接口和抽象类都不可以实例化。接口必须让实现它的子类实现它的方法 ...
谢谢·············明了····
作者:
gentleman
时间:
2014-5-23 20:42
本帖最后由 gentleman 于 2014-5-23 20:46 编辑
1、抽象类是可以有构造函数的。但很多人认为,构造函数用于实例化一个对象(或建立一个对象的实例),而抽象类不能被实例化,所以抽象类不应该有公共的构造函数(FxCop.设计规则)。但不应该有“公共”的构造函数,和不应该有构造函数,这是两个不同的概念,所以,FxCop.设计规则中也说,如果抽象类需要构造函数,那么应该声明为“protected”。
2、既然抽象类是可以,甚至有时候应该有构造函数,那抽象类的构造函数的作用是什么?我觉得至少有两个:
(1)初始化抽象类的成员;
(2)为继承自它的子类使用。
比如以下例子:
public abstract class Component
{
protected string name;
private Component(string name)
{
this.name = name;
}
public abstract void Add(Component component);
public abstract void Remove(Component component);
}
public class Composite : Component
{
private List<Component> children = new List<Component>();
public Composite(string name)
: base(name)
{ }
public override void Add(Component component)
{
this.children.Add(component);
}
public override void Remove(Component component)
{
this.Remove(component);
}
}
复制代码
3、即使我们声明一个没有构造函数的抽象类,编译器还会为我们生成一个默认的保护级别的构造函数。子类实例化时(不管是否为带参构造)只会调用所有父类的无参构造函数,而带参构造必须通过显式去调用.调用顺序是先调用抽象类的无参构造函数,如果子类实例化时是使用带餐的构造函数,则再接着调用抽象类的带参构造函数,最后调用子类本身的构造函数。
接口中没有构造函数
接口中不能定义构造器的理由:
1. 构造器用于初始化成员变量,接口没有成员变量
2. 类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器链的调用次序
3. 构造器是属于类自己的,不能继承。因为是纯虚的,接口不需要构造器。
————————————————————————————————————————————引用自网络
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2