java基础系列(九) 接口和抽象类
创始人
2024-05-30 21:37:12
0

一. 接口

简单的说,接口就是一种被规范的标准,只要符合这个标准都可以通用,接口的表现

在于对行为的抽象. 

1.1 创建接口的格式

格式1:  public interface 接口名

格式2:  interface 接口名

1.2  在JDK1.8之后, 在接口中可以定义实现的方法体是java8的一大特性,可以定义多个静态或者默认的方法, 下面的代码注释中说明了使用方法.

接口代码如下:

public interface Action {// 接口中都是抽象方法和常量,不可能有非抽象方法,常量必须被赋值。//接口中的方法默认是 public abstractpublic abstract void eat();//常量默认是 public static finalpublic static final int age = 20;//Java8中接口中引入默认方法和静态方法,以此来减少抽象类和接口之间的差异//静态方法public static void method() {/*** 1、定义一个静态的带有方法体的方法* 2、接口不能创建对象,调用静态方法不需要对象* 3、接口名直接调用:  Action.method();*/System.out.println("接口中静态方法");}//默认方法用default来修饰/*不同于静态方法,默认方法是一个非静态方法对于非静态方法,只能通过对象进行调用接口是不能直接new, 因此我们需要子类来实现接口** */default void methodDefault(){System.out.println("default method in interface");}}

验证方法:

public class TestInterface implements Action{@Overridepublic void eat() {System.out.println("实现接口中的eat方法");}public static void main(String[] args) {Action action = new TestInterface();//调用接口中defaut方法action.methodDefault();//调用接口中的static方法 直接用 接口.方法();Action.method();}
}

打印如下:


default method in interface接口中静态方法

1.3 接口有什么特点?

接口中声明全是public static final修饰的常量
接口中所有方法都是抽象方法
接口是没有构造方法的
接口也不能直接实例化
接口可以多继承

二. 抽象类和接口对比

抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。
从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

相同点:
接口和抽象类都不能实例化
都位于继承的顶端,用于被其他实现或继承
都包含抽象方法,其子类都必须覆写这些抽象方法

不同点:


抽象类接口

抽象类使用abstract关键字声明接口使用interface关键字声明

子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现子类使用implements关键字来实现接口。它需要提供接口中所有声明的方法的实现


抽象类可以有构造器接口不能有构造器
访



抽象类中的方法可以是任意访问修饰符

接口方法默认修饰符是public. 并且

不允许定义为 private 或者protected

一个类最多只能继承一个抽象类一个类可以实现多个接口

抽象类的字段声明可以是任意的接口的字段默认都是 static 和 final

备注:Java8中接口中引入默认方法和静态方法,以此来减少抽象类和接口之间 的差异。
现在,我们可以为接口提供默认实现的方法了,并且不用强制子类来实现它。

接口和抽象类各有优缺点,在接口和抽象类的选择上,必须遵守这样一个原则:


1 . 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量 少用抽象类。
2.   选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用 的功能。

相关内容

热门资讯

中证A500ETF摩根(560... 8月22日,截止午间收盘,中证A500ETF摩根(560530)涨1.19%,报1.106元,成交额...
A500ETF易方达(1593... 8月22日,截止午间收盘,A500ETF易方达(159361)涨1.28%,报1.104元,成交额1...
何小鹏斥资约2.5亿港元增持小... 每经记者|孙磊    每经编辑|裴健如 8月21日晚间,小鹏汽车发布公告称,公司联...
中证500ETF基金(1593... 8月22日,截止午间收盘,中证500ETF基金(159337)涨0.94%,报1.509元,成交额2...
中证A500ETF华安(159... 8月22日,截止午间收盘,中证A500ETF华安(159359)涨1.15%,报1.139元,成交额...
科创AIETF(588790)... 8月22日,截止午间收盘,科创AIETF(588790)涨4.83%,报0.760元,成交额6.98...
创业板50ETF嘉实(1593... 8月22日,截止午间收盘,创业板50ETF嘉实(159373)涨2.61%,报1.296元,成交额1...
港股异动丨航空股大幅走低 中国... 港股航空股大幅下跌,其中,中国国航跌近7%表现最弱,中国东方航空跌近5%,中国南方航空跌超3%,美兰...
电网设备ETF(159326)... 8月22日,截止午间收盘,电网设备ETF(159326)跌0.25%,报1.198元,成交额409....
红利ETF国企(530880)... 8月22日,截止午间收盘,红利ETF国企(530880)跌0.67%,报1.034元,成交额29.0...