Java的接口

接口

接口是功能的集合,可以看作一个引用类型,它是比抽象类更加抽象的"类"
接口只描述所应该具有的方法,并没有具体的实现;具体的实现让接口的实现类去完成。

这样的好处是:让功能的声明和具体实现相分离,优化了程序的设计。
请记住:一切事物均有功能,即一切事物均匀接口。

接口的概述

格式
public interface 接口名{
抽象方法;
抽象方法;
}

与定义类有所不同,类是用class,而接口用interface关键字,但是所有的接口依然是.java文件,经过编译后还好生成.class文件。所有可以把接口看作一个特殊的Java类

注意

接口中所有的方法都是抽象方法,用public修饰或者默认不写修饰符
接口中无法定义普通的成员变量
接口中定义变量,有固定的写法:public static final 大写名称 ,其值是不能改变的
接口是不能直接创建对象的
接口定义好之后,让子类去实现,用关键字implements

实现接口的格式
public class Child implements 接口1,接口2,接口3{
重写接口123里面所有方法
}
案例演示
package com.hcj.inter;
/**
* A
*
* @author hcj
* @date 2022-07-11
*/
public interface A {
// 固定格式的成员变量
public static final String A_B = "固定";
// 抽象方法
void methodA1();
void methodA2();
}
package com.hcj.inter;
/**
* B
*
* @author hcj
* @date 2022-07-11
*/
public interface B {
void methodB1();
void methodB2();
}

(1) 类实现接口可以多实现,接口之间用逗号 , 隔开

package com.hcj.inter;
/**
* AImpl
*
* @author hcj
* @date 2022-07-11
*/
public class AImpl implements A,B{
@Override
public void methodA1() {
}
@Override
public void methodA2() {
}
@Override
public void methodB1() {
}
@Override
public void methodB2() {
}
}

(2) 接口是可以继承接口用关键字 extends,接口可以多继承,接口之间用逗号 , 隔开

public interface C extends A,B{}

(3) 类可以继承类,也可以同时实现接口。注意要先继承后实现(单继承多实现)

public class BImpl extends Person implements A,B{
@Override
public void methodA1() {
}
@Override
public void methodA2() {
}
@Override
public void methodB1() {
}
@Override
public void methodB2() {
}
}

接口的定义

格式
public interface 接口名{
抽象方法;
抽象方法;
}

与定义类有所不同,类是用class,而接口用interface关键字,但是所有的接口依然是.java文件,经过编译后还好生成.class文件。所有可以把接口看作一个特殊的Java类
注意:接口中所有的方法都是抽象方法,用public修饰或者默认不写修饰符
接口中无法定义普通的成员变量
接口中定义变量,有固定的写法:public static final 大写
名称 ,其值是不能改变的
接口是不能直接创建对象的
接口定义好之后,让子类去实现,用关键字implements

实现接口的格式
public class Child implements 接口1,接口2,接口3{
重写接口123里面所有方法
}
案例演示
package com.hcj.inter;
/**
* A
*
* @author hcj
* @date 2022-07-11
*/
public interface A {
// 固定格式的成员变量
public static final String A_B = "固定";
// 抽象方法
void methodA1();
void methodA2();
}
package com.hcj.inter;
/**
* B
*
* @author hcj
* @date 2022-07-11
*/
public interface B {
void methodB1();
void methodB2();
}

(1) 类实现接口可以多实现,接口之间用逗号 , 隔开

package com.hcj.inter;
/**
* AImpl
*
* @author hcj
* @date 2022-07-11
*/
public class AImpl implements A,B{
@Override
public void methodA1() {
}
@Override
public void methodA2() {
}
@Override
public void methodB1() {
}
@Override
public void methodB2() {
}
}

(2) 接口是可以继承接口用关键字 extends,接口可以多继承,接口之间用逗号 , 隔开

public interface C extends A,B{}

(3) 类可以继承类,也可以同时实现接口。注意要先继承后实现(单继承多实现)

public class BImpl extends Person implements A,B{
@Override
public void methodA1() {
}
@Override
public void methodA2() {
}
@Override
public void methodB1() {
}
@Override
public void methodB2() {
}
}

接口的特点

(1)接口是多继承
(2)接口与父类的功能可以重复,均代表要具备的某种功能,并不冲突

public class Fu {
public void method(){
System.out.println("Fu");
}
}
public interface D {
public void method();
}
public class Zi extends Fu implements D{
// 此时有两个method() 如果不去重写接口D的method(),会
使用Fu中的method()
}
public static void main(String[] args) {
Zi z = new Zi();
z.method();
}
public class Zi extends Fu implements D{
// 如果重写method() 这时会同时重写Fu中method()和接口D
中的method()
@Override
public void method() {
System.out.println("重写method");
}
}
public static void main(String[] args) {
Zi z = new Zi();
z.method();
}

(3)类可以实现多个接口
(4)类可以继承类,紧接着可以实现多个接口,但是不能先实现接口后继承类

public class BImpl extends Person implements A,B{}

面试题:接口和抽象类有什么区别?

先去解释一下类和接口的定义
(1)从继承关系
类继承类用extends,只能单继承接口继承接口用extends,可以多继承类实现接口用implements,可以多实现接口不能继承类
(2)从方法
抽象类可以有抽象方法,也可以有非抽象方法接口中的方法必须都是抽象方法

(3)从成员变量
抽象类有成员变量,接口没有普通的成员变量,只有public static final 常量
(4)从修饰符
抽象类声明方法和类要加上abstract关键字,成员变量可以无固定的修饰符接口里abstract关键字可以省略不写,用固定的修饰符去定义成员变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值