关于关键字extends与implements的不同以及关于接口的详细介绍的文章
extends与implements的不同
1、在类的声明中,通过关键字extends来创建一个类的子类。
一个类通过关键字implements声明自己使用一个或者多个接口。
extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法;
implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用
2、extends是继承父类,只要那个类不是声明为final
JAVA中不支持多重继承,但是可以用接口 来实现,这样就要用到implements,继承只能继承一个类,
但implements可以实现多个接口,用逗号分开就行了 比如 :
class A extends B implements C,D,E
接口实现的注意点:
a.实现一个接口就是要实现该接口的所有的方法(抽象类除外)。
b.接口中的方法都是抽象的。
c.多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口。
与Extends的不同
extends, 可以实现父类,也可以调用父类初始化 this.parent()。而且会覆盖父类定义的变量或者函数。这样的好处是:架构师定义好接口,让工程师实现就可以了。整个项目开发效率和开发成本大大降低。 implements,实现父类,子类不可以覆盖父类的方法或者变量。即使子类定义与父类相同的变量或者函数,也会被父类取代掉。
这两种实现的具体使用,是要看项目的实际情况,需要实现,不可以修改implements,只定义接口需要具体实现,或者可以被修改扩展性好,用extends。
- 介绍
- Abstract,即抽象。笼统的描述一类东西。
打个比方:
我们说车子都可以跑(run)。但有几个轮子,怎么跑,对于不同的车有不同的结果。自行车2个轮子需要人踩着跑,三轮车有3个轮子可以人踩、也能电动,汽车发动机推动跑等等,那么“车”的表达为抽象的。
特点:
abstract可以修饰类,也可以修饰方法;
abstract修饰的类可以被继承和实现,但是这个类本身不能被实例化;
抽象方法必须在抽象类中,抽象类中可以有非抽象的方法;
抽象类中可以没有抽象方法,这样做的作用是这个类不可以被实例化;
抽象类的子类在继承抽象类后,必须把父类中的抽象方法重写,否则子类也会自动变为抽象类;
抽象方法用于被子类继承后重写。即是父类的抽象方法是空的,必须由子类继承之后在子类中由子类实现,这可以达到不同子类可以根据自己的特性来定义自己从父类继承过来的抽象方法;
abstract不能与final关键字共存,因为final关键字修饰的类是不能被继承的;
abstract不能与private关键字共存,因为私有的东西不能继承;
abstract不能与static关键字共存,当static修饰方法时,该方法可以通过类名直接调用,而abstract修饰的抽象方法是不能被调用的;
abstract修饰的类中的普通方法可以通过该抽象类的子类直接调用。
抽象类与interface关键字:
当一个抽象类中的所有成员只有抽象方法时,便是一个接口,可以用关键字interface表示;
接口中的成员有两种:1.全局常量 2.抽象方法 ;
接口中的权限必须是public,若没写public,会自动加上public;
接口中有抽象方法,因此接口也是抽象类,不可以实例化。所以其子类也必须覆盖了接口中所有的抽象方法后,才能实例化,否则他也是一个抽象类。
二、优缺点
抽象类有什么好处呢?
1、由于抽象类不能被实例化,最大的好处就是通过方法的覆盖来实现多态的属性。也就是运行期绑定
2、抽象类将事物的共性的东西提取出来,由子类继承去实现,代码易扩展、易维护。
三、不能和下列关键字共存
abstract是抽象类的关键字,也是抽象方法声明上必须加的修饰符,在定义方法上它一般不能与以下几个关键字共存:
1、和static:
abstract class A {
public abtract static void method();
}
static修饰后可以直接类名调用方法,但是抽象方法没有实现体,调用无意义;
2、和final:
final修饰的类不能被继承,修饰的方法不能被重写,修饰的成员变量只能为常量;但是继承的子类要重写这个抽象方法,所以会出现矛盾;
3、和private:
抽象方法是为了让子类重写并给定实现体,但是private修饰的方法只能本类访问,所以矛盾
此外关于接口的详细介绍
https://liuyangjun.blog.csdn.net/article/details/80259836
本文作者:浩楠要秃顶
本文链接:https://www.cnblogs.com/newTuiMao/p/17128148.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗