接口中有构造方法吗中,为什么可以传入一个接口

为什么不能在接口中定义构造函数?
[问题点数:20分,结帖人YidingHe]
为什么不能在接口中定义构造函数?
[问题点数:20分,结帖人YidingHe]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2003年9月 C/C++大版内专家分月排行榜第二2002年6月 C/C++大版内专家分月排行榜第二2002年4月 C/C++大版内专家分月排行榜第二
2007年3月 C/C++大版内专家分月排行榜第三2007年2月 C/C++大版内专家分月排行榜第三2007年1月 C/C++大版内专家分月排行榜第三2003年7月 C/C++大版内专家分月排行榜第三
2003年9月 C/C++大版内专家分月排行榜第二2002年6月 C/C++大版内专家分月排行榜第二2002年4月 C/C++大版内专家分月排行榜第二
2007年3月 C/C++大版内专家分月排行榜第三2007年2月 C/C++大版内专家分月排行榜第三2007年1月 C/C++大版内专家分月排行榜第三2003年7月 C/C++大版内专家分月排行榜第三
2003年1月 C++ Builder大版内专家分月排行榜第二
2005年4月 Java大版内专家分月排行榜第三2001年12月 C/C++大版内专家分月排行榜第三
2003年9月 C/C++大版内专家分月排行榜第二2002年6月 C/C++大版内专家分月排行榜第二2002年4月 C/C++大版内专家分月排行榜第二
2007年3月 C/C++大版内专家分月排行榜第三2007年2月 C/C++大版内专家分月排行榜第三2007年1月 C/C++大版内专家分月排行榜第三2003年7月 C/C++大版内专家分月排行榜第三
2003年1月 C++ Builder大版内专家分月排行榜第二
2005年4月 Java大版内专家分月排行榜第三2001年12月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!|在JAva封装的里面使用了get/set接口为何在“构造函数”的时候会报错如果想要构造应该怎么实现呢_百度知道
在JAva封装的里面使用了get/set接口为何在“构造函数”的时候会报错如果想要构造应该怎么实现呢
我有更好的答案
您好,构造函数分为有参构造和无参构造。 每一类都有默认的构造函数,jvm会根据你new出新的类对象时传递的参数返回新的类对象。比如 Father f =
new Father(&张三&); 那么这个Father类中就有两个构造,一个有参一个无参,有参构造的参数为String类型,如果实例化时的参数不对就会报错,如果实例化时传入不存在的参数类型也会报错。你参考一下
没代码不知道你说的是什么。。。但是你写完属性直接用alt+shift+s+r就直接导入set
问题描述的不是很清楚,最好贴一下代码,你是想在构造函数里面对java类中的属性赋值吗,如果是构造函数里面最好这样赋值this.a = a
报什么错?整完整点呗
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
构造函数的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。接口为什么不能有构造函数_百度知道
接口为什么不能有构造函数
我有更好的答案
以举例的方式说到如何区分抽象类和接口,这里我们从Java语法谈起,使我们更加了解这两者的内在区别。它们的语法区别:1)接口不能有构造方法,抽象类可以有。2)接口不能有方法体,抽象类可以有。3)接口不能有静态方法,抽象类可以有。4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。
忽然有此一文,是因为同学疑惑道:抽象类居然还有构造方法,又不能直接用来new。我的解释是平时在抽象类中对于构造方法的存在,没有什么印象,是因为IDE默认为你生成了一个无参构造方法,也可以显式地写出构造方法,这个构造方法,是用来被子类调用的,因为任何子类都必须调用从Object开始的所有父亲的构造方法,才算完成初始化工作。那么我引申一下,问他们,接口有构造方法吗?他们的理解,抽象可以有,为什么接口不可以有?!那么在接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。这又何解?
从语法的角度来说,抽象类必须有构造方法,而接口严禁有构造方法,这本身也说明了它们性质的不同。抽象类是一个类,别的类是用关键字 extends 来继承下来,并扩展的,有非常强的is-a的关系,这种关系一般来说符合里氏代换原则。而接口,是被其他类用关键字 implements 来实现接口定义的方法的。如果没什么区别,何必整出两个不同的关键字。
接口只是定义功能和行为规范,如果一个类实现了一个接口,那么这个类必须遵守这个接口的方法约定,但没有is-a的关系。把墙壁上的“小学生行为规范”想象成一个接口,那么是小学生必须遵守这个约定,但小学生不是“行为规范”。
构造方法是用来在对象初始化前对对象进行一些预处理的,提供了实例化一个具体东西的入口。接口只是声明而已,不一定要进行什么初始化,就算要进行初始化,也可以到实现接口的那一些类里面去初始化。接口只是用来表述动作,表述规范来的,可以new一台computer,但我们无法new一个IDE、SATA、PCI、PS-2。因此,接口要构造方法何用?接口是一种规范,被调用时,主要关注的是里边的方法,而方法是不需要初始化的,类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器的调用次序,构造器是属于类自己的,不能继承,因为是纯虚的,接口不需要构造方法。而抽象类是具体类的祖先,即使是石器时代,也总要干些初始化的工作,抽象类虽然是不能直接实例化,但实例化子类的时候,就会初始化父类,不管父类是不是抽象类都,都会调用父类的构造方法,初始化一个类,先初始化父类,有没有说初始化接口。
再拿汽车的例子来说明两者的区别,Car, Track, Van 是 Vehicle 抽象类的子类,那么你可以说小娇车是车子,拖拉机是车子,货车是车子。而做为他们共同的父类,会做一些初始化工作,如加汽油、机油、冷却液。另外所有车子具有共同属性,轮子,方向盘,油门等。Brake 是一个刹车动作接口,这个规范要求车子实现了它,必须有能力把速度减到零,只是实现途径不一样,或者是鼓刹,或者是碟刹。或者是效果不一样,有的刹车灵一点,有的刹车差一点。
在抽象类和接口均可以被考虑的地方,接口首先是被提倡使用的,在语法上没有is-a的关系,使用起来更加灵活,另外可以多实现毕竟是一种难得的资源。而抽象类当存在大家共同的实现方法,或者有很多属性操作时,才是首选,当考虑使用抽象类时,在可预见的未来,它要体现出被继承时非常强烈的is-a关系。
接口不能有方法体,就是强制接口定义者不能给接口增加一些详细的实现,指定的必须是纯虚的接口,对于架构者来说,它需要做的就是定义一个可以理解的接口名,参数列表,以及返回类型。而抽象类是可以有自己的实现方法,这个方法可以被用来被执行。有时候,我们会误以为抽象类中的方法不能用super显示调用,因为super是指代父类对象,而抽象类MS不能有对象。但事实上可以,任何子类实际的对象,都可以理解成父类的对象。
接口的所有方法都是抽象的,而抽象方法是没有static,有static的方法是不能override的,不能实现多态,所以这样定义接口才有意义,接口中定义的方法目的很明确:就是给实现类去实现,如果你在接口中将方法声明为静态的(与具体的实例无关),但接口中的方法又要求必须被实现类去实现(可能会有多个实现类),这岂不是自相矛盾!如果硬要加上static上去,编译器会友好提示:Illegal modifier for the interface method FF.f(); only public & abstract are permitted。说到底,不能再加任何除public 和 abstract 的任何修饰符了,如:private, protected, final, static.
数据成员没有多态的概念,只有可不可以被访问的说法,如果是公有的数据成员是在任何地方都可以被访问和修改的,那么接口定义的数据成员如果是私有的,又何必定义,因为它没有方法,就是说没有任何方法对这个数据成员可以操作。如果是公有的,谁都可以修改,那么,多重实现多个接口,这个数据不是改得乱了套?所以接口一般不允许有数据成员,但如果真的有,明确默认即为public final static, 严格保证对于所有实现者来说只有一份原始的数据。
那么在架构设计时,如何使用抽象类和接口来解决问题,是一个非常复杂的问题,抽象类更侧重于归纳同一父类的子类的共同特征,如果属性,方法;接口更侧重于定义任意的类有没有相同语义的方法,它是一个一经定义不轻易更改的规范,它的修改在项目中,往往是动一发而牵全身,即使有考虑不周到的地方,也会使用新增接口的形式去弥补。其实abstract class表示的是&is-a&关系,interface表示的是&like-a&关系。最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
资深电脑人
为您推荐:
其他类似问题
构造函数的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。java 为什么一个抽象类构造方法中可以调用未实例化的子类的方法_百度知道
java 为什么一个抽象类构造方法中可以调用未实例化的子类的方法
public abstract class Person
{ Person(String name) {
System.out.println(&父类构造函数--& + name);
test(); } abstract void test();}public class Student extends Person { Student(String name) {
super(name);
System.out.println(&子类构造方法...
我有更好的答案
Person 是父类Student ss = new Student(&hanyaquan&);这本身就是在创建子类对象,创造子类对象的时候,首先会调用父类的构造方法,你可以理解为:没有爸爸,那里来的孩子?所以首先调用 父类Person 的构造方法,然后才会执行子类的构造方法。
您好,为什么父类构造器中test方法会执行,而且执行的是子类的test方法
这事面向对象中的
多态。Student ss = new Student(&hanyaquan&);test() 是方法,是函数,同时只有行为才能被定义成方法。父类引用指向子类对象。比如:有一个人想求你办test()的事,而这个人不认识你new Student(&hanyaquan&),他认识你爸Student ss ,但是你爸test()又不能办这个人的事。所以这个人就通过Student ss(你爸)找到了你
new Student(&hanyaquan&);。然后就相当于,你爸让你做这个事,你还得听,所以调用的是 子类的 test()
采纳率:72%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。接口中有构造方法!【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:709,310贴子:
接口中有构造方法!收藏
我就是想问下为什么可以这样写?详细解释下
51CTO学院12年行业品牌,1600万用户选择,中国专业IT技能学习平台.java资深名师授课,0基础从入门到精通,java报名与培训中心.
没看见构造方法
因为就是有这种操作
这是匿名内部类
这不是构造方法
大声告诉我构造方法的定义
接口的构造方法是毫无意义的
你为啥偏偏要去写?
这叫匿名类,相当于创建了一个实现了该接口的对象
这是闭包 也就是楼上各位讲得匿名内部类
javajava培训,零基础开始,入门到精通-优选职坐标java培训,职坐标java培训,职坐标IT培训[实力教学],理论加实践,1!
这是匿名内部类
...楼主,这不是构造方法。这是匿名内部类(实际上就是一个对象)
我进来蹭蹭经验
登录百度帐号}

我要回帖

更多关于 接口没有提供构造方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信