㈠ 接口的实现类必须实现接口的所有方法吗
是的,接口实现类必须实现接口的所有方法,如果要实现部分的话,可以用抽象类
㈡ Java:为什么抽象类实现接口可以不实现其中的所有方法
抽象类实现接口可以不实现其中的所有方法:其实接口就是一个抽象类的另一种体现形式。
如果一个抽象类实现了抽象接口,那么本身这个抽象类就是抽象的,意味着就算实现了,子类再extends抽象类的话就没必要实现了。
举个例子:
小明、小花,他们是好朋友,他们各自有秘密,如果小明把秘密告诉了小花,那么小花也不一定必须把小花的秘密告诉小明吧。
PS:抽象类本身是没用的,提供给子类来使用,如果抽象类实现接口然后重写抽象类方法,岂不是失去了抽象的概念!
㈢ Java中 一个类实现了某接口 则必须实现该接口中的所有方法么
不一定,关键要看子类是否是抽象类。
如果子类是非抽象类,则必须实现接口中的所有方法;
如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!
1、抽象类定义
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。
2、抽象类特点
1)抽象类不能实例化。
2)抽象类可以包含抽象方法和抽象访问器。
3)不能用 sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。 采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承。
4)从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。
3、与具体类的比较
1)抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
2)允许(但不要求)抽象类包含抽象成员。
3)抽象类不能被密封。
4、与接口的比较
1)相同点
a、不能实例化;
b、包含未实现的方法声明;
c、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)
2)不同点
a、类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。
b、抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。
c、抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。
d、抽象类是对象的抽象,然而接口是一种行为规范。
㈣ 1、反射是通过接口类,调用实现类,为何不直接调用接口类,来实现方法。我想了解这一做的意思
这是一个应用场景的问题,如果你的项目非常小不必这样写.
很多时候要运行的时候 才知道需要运行什么方法.
加入有一个非常庞大的系统,上千个类,上万个接口.
如果你呢么写我要写多少调用代码啊.
如果用反射的话,我只需要把我要调用的类名,方法名传给调用类就行了,这样的话只需要一个调用类.
㈤ java抽象类为什么不用实现接口实现的方法
应该是从设计角度考虑的,和内存应该没什么关系,JAVA编程思想里提到过如非必要应该首选类而不是接口
抽象类,使部分抽象,它是可以带有一些有方法体的方法,而且可以含有私有成员
接口,的所有方法都是抽象的,public的
而且抽象类在实现时可以不必实现所有方法(这样的子类仍然为抽象类),而接口实现时必须实现所有方法。。。你这个例子里使用接口或是抽象类应该没有太大的区别,我的理解就是这样了。。
㈥ 抽象类实现一个接口为什么可以不用都实现接口中的方法
1)抽象类本身就存在抽象方法,抽象方法不需要实现;
2)接口中的方法都是抽象的,实际修饰符是public abstract,我们平时都省略了
所以抽象类不需要实现接口中的方法,但是抽象类的子类(抽象类除外) 就要同时实现抽象类以及接口中的所有抽象方法!
㈦ C#中像这种类里面为什么继承的接口,但类里面却没有实现接口方法但是却不会报错,求大神解答
这是显式实现,你可以了解一下显式实现的语法。
你第一张图的 public 方法实现的接口都属于隐式实现。
你强制转换成 IServiceProvider 就能调用这个 GetService 方法了。
㈧ 为什么使用接口不用实现类
面向对象是解决软件需求的变化而产生的,他的目的就是让需求变化时软件的改动达到最小化。如果只是一个IA接口,一个AClass类,IA接口就是多余的,你直接用实现类就可以了。
如果又来了一个BClass,也需要toString()方法。
用实现类可能忘了在BClass中定义toString()方法,但让BClass实现IA接口,就必须在BClass中实现toString()方法,不然编译不通过,这是接口的第一个好处:强制实现。
如果要把IA ia = new AClass();换成new BClass();
用实现类需要修改两行,AClass a = new AClass();换成BClass b = new BClass();,a.toString(); 换成b.toString();
用接口只需要修改一行,IA ia = new AClass();换成IA ia = new BClass();
而IA.toString();是不需要修改的,这是接口的第二个好处:抽象行为。
㈨ java接口中的方法用default修饰有什么特性,为什么实现类不自动生成接口中的方法,
在Java8之前,接口中的实现方法必须是abstract的,实现该接口的类必须重写该方法,接口只负责声明该方法。
Java8给接口增加了default关键词,用default修饰的方法可以有实现内容,实现该接口的类可以不重写用default修饰的方法,类似于继承。但这样也会带来新的问题。
Java中只能继承一个类,但是可以实现多个接口,当多个接口中有同一个方法时,以前是没问题的,因为实现类必须重写方法。但现在,当多个接口中有同一个用default修饰的方法时,就无法判断到底实现的是哪个接口的方法。这种情况下,就必须重写方法。
还有一种情况,一个类继承的父类和实现的接口中都有同一个方法,而这个类又没有重写时,实现的是父类的方法,而不是接口中的方法。