当前位置:网站首页>接口和抽象
接口和抽象
2022-08-03 04:43:00 【lbsjdxsn】
抽象方法:
如果一个方法,不需要实现体(函数内容),就可以声明抽象方法
抽象方法:没有方法体的方法。java中使用abstract关键字声明的方法就是抽象方法。
访问修饰符 abstract 返回值类型 方法名称(参数列表);
抽象方法必须定义在抽象类中。
注意:抽象类中不一定有抽象方法!
如果一个类继承了抽象类,就必须实现该类的抽象方法!
如果一定不实现,则将这个子类继续声明抽象类。
抽象类:
被abstract关键字修饰的类。
细节问题
1、抽象类一定是个父类?
是的,因为不断抽取而来的。
2、抽象类是否有构造函数?
有,虽然不能给自己的对象初始化,但是可以给自己的子类对象初始化。
抽象类和一般类的异同点:
相同:
- 它们都是用来描述事物的。
- 它们之中都可以定义属性和行为。
不同:
- 一般类可以具体的描述事物。抽象类描述事物的信息不具体
- 抽象类中可以多定义一个成员:抽象函数。
- 一般类可以创建对象,而抽象类不能创建对象。
3、抽象类中是否可以不定义抽象方法?
是可以的,那这个抽象类的存在到底有什么意义呢?仅仅是不让该类创建对象。
4、抽象关键字abstract不可以和哪些关键字共存?
- final:fianl修饰的类是无法被继承的,而abstract修饰的类一定要有子类.final修饰的方法无法被覆盖,但是abstract修饰的方法必须要被子类去实现的。
- static:静态修饰的方法属于类的,它存在与静态区中,和对象就没关系了。而抽象方法没有 方法体,使用类名调用它没有任何意义。
- private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法。互相矛盾
接口:
接口,本质是特殊的类,特殊抽象类
接口中所有方法都是没有实现的(抽象方法)。
在jdk8之前:
接口中的所有属性和方法,默认都是public的!即便是你没有使用public关键字修饰。
java中使用interface关键字来定义接口
java中,接口可以多实现。
接口的实现使用implements关键字实现接口
子类一旦实现了接口,必须要实现接口所有的抽象方法,如果不想实现,则必须将该子类声明为抽象类。
接口也无法直接实例化,必须使用子类,以多态的形式完成实例化。
注意:接口可以多实现!
- 类继承类同时实现接口
class Fu{
public void show(){
}
}
interface Inter{
public void show1();
}
class Zi extends Fu implements Inter{
public void show1(){
}
}
- 接口多继承
interface A{
void show();
}
interface B{
void show1();
}
interface C{
void show2();
}
interface D extends A,B,C{
void show3();
}
- 没有抽象方法的抽象类的由来
interface Inter{
void show();
void show1();
void show2();
oid show3();
}
abstract class AbsInter implements Inter{
public void show(){
}
public void show1(){
}
public void show2(){
}
public void show3(){
}
}
/* //此类直接实现Inter,但只使用其他show和show2方法,这样导致其他两个方法也要实现 //不符合我们的要求 class SubInter2 implements Inter{ public void show() { System.out.println("show"); } public void show1() { } public void show2() { System.out.println("show2"); } public void show3() { } } */
jdk8的接口新特性:
允许接口存在默认方法和静态方法,非抽象方法
接口与抽象类的区别
相同点:
- 都位于继承的顶端,用于被其他实现或继承;
- 都不能实例化;
- 都包含抽象方法,其子类都必须覆写这些抽象方法;
区别:
- 抽象类为部分方法提供实现,避免子类重复实现这些方法,提供代码重用性;接口只能包含抽象方法;
- 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
二者的选用:
- 优先选用接口,尽量少用抽象类;
- 需要定义子类的行为,又要为子类提供共性功能时才选用抽象类
边栏推荐
- MySQL 入门:Case 语句很好用
- 【Harmony OS】【ARK UI】ets使用startAbility或startAbilityForResult方式调起Ability
- Modified BiotinDIAZO-Biotin-PEG3-DBCO|diazo-biotin-tripolyethylene glycol-diphenylcyclooctyne
- 自组织是管理者和成员的双向奔赴
- Shell之条件语句
- mysql bool盲注
- 【Biotin Azide|cas:908007-17-0】Price_Manufacturer
- 【Harmony OS】【ARK UI】Date 基本操作
- JS bottom handwriting
- 私域流量引流方法?分享购火爆的商业模式,你值得拥有
猜你喜欢
普乐蛙VR台风体验馆厂家VR防震减灾模拟VR沉浸式体验设备
数字化时代,企业如何建立自身的云平台与商业模式的选择?
Problems that need to be solved for interrupting the system
Kotlin-Flow常用封装类:StateFlow的使用
接口测试框架实战 | 流程封装与基于加密接口的测试用例设计
GIS数据漫谈(五)— 地理坐标系统
Unity2D horizontal board game tutorial 6 - enemy AI and attack animation
【生物素叠氮化物|cas:908007-17-0】价格_厂家
c语言结构体中的冒泡排序
How many moments have you experienced the collapse of electronic engineers?
随机推荐
【HMS core】【Ads Kit】华为广告——海外应用在国内测试正式广告无法展示
rosbag工具plotjuggler无法打开rosbag的问题
Can Oracle EMCC be installed independently?Or does it have to be installed on the database server?
Get the Ip tool class
数据库基本概述与SQL概述
typescript47-函数之间的类型兼容性
Practical application of WebSocket
6.神经网络剖析
Interface testing framework of actual combat (2) | interface request assertion
表的创建、修改与删除
Shell之条件语句
7.Keras开发简介
11.机器学习基础:机器学习的四个分支
install ambari
Redis缓存雪崩、缓存穿透、缓存击穿
OpenFOAM extracts equivalency and calculates area
GIS数据漫谈(六)— 投影坐标系统
User password encryption tool
【生物素叠氮化物|cas:908007-17-0】价格_厂家
接口测试框架实战 | 流程封装与基于加密接口的测试用例设计