2021-07-22

本文详细介绍了Java中的接口,包括接口的定义、使用、类的实现、抽象类的实现、接口的方法(默认、静态、私有)、接口的多实现、接口的继承以及接口中的其他成员特点。通过实例展示了如何定义接口、如何实现接口以及处理重名方法的情况,强调了接口在多实现和继承中的灵活性。
摘要由CSDN通过智能技术生成

java中的接口详解(IDEA版本)

(1):接口的定义:它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。
(2):接口的使用:接口不可以实例化,但是可以被实现。实现接口的类,必须重写接口中的所有的抽象方法,但是如果该类是抽象类,其可以不用重写接口的抽象方法.如下:

# 定义一个关于animal的接口
package demo;

public interface animal {

    public abstract void speak();

    public abstract void eat();

    public static void run(){
        System.out.println("animal can run ");
    }
    
	public default void sleep(){
        System.out.println("animal need sleeping");
    }

}

(3):类的实现,即需要重写接口中的所有的抽象类, 同时继承了接口的默认方法,可以通过实现类的实例化进行直接调用,也可以进行重写

public class dog implements animal {

    @Override
    public void speak() {
        System.out.println("汪汪汪");
    }

    @Override
    public void eat(){
        System.out.println("狗吃肉");
    }

    public static void main(String[] args) {
        dog haha = new dog();
        haha.speak();
        haha.eat();
        haha.sleep();

    }
}

(4):抽象类的实现

package demo;

public abstract class dog_abstract implements animal {

}

(5):关于接口的方法
1:默认方法:使用 default 修饰,不可省略,供子类调用或者子类重写
2:静态方法:使用 static 修饰,供接口直接调用,不可以通过类名或者实现类的对象调用

# 定义一个接口
public interface LiveAble {
	public static void run(){
		System.out.println("跑起来~~~");
	}
}

public class Animal implements LiveAble {
// 无法重写静态方法
}

public class InterfaceDemo {
	public static void main(String[] args) {
		// Animal.run(); // 【错误】无法继承方法,也无法调用
		LiveAble.run(); //
	}
}
输出结果:
跑起来~~~

3:私有方法:使用 private 修饰,供接口中的默认方法或者静态方法调用。(在jdk1.8中,不提供该功能)私有方法:只有默认方法可以调用。私有静态方法:默认方法和静态方法可以调用。

(6):接口的多实现:在继承当中一个子类只可以继承一个父类,但是一个类却可以实现多个接口,这就是接口的多实现。

class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
	// 重写接口中抽象方法【必须】
	// 重写接口中默认方法【不重名时可选】
}

多实现中的重名问题:
1:抽象方法重名:只需要重写一次即可

# 定义多个接口
interface A {
	public abstract void showA();
	public abstract void show();
}
interface B {
	public abstract void showB();
	public abstract void show();
}

# 实现多个接口并对抽象类进行重写
public class C implements A,B{
	@Override
	public void showA() {
		System.out.println("showA");
	}
	@Override
	public void showB() {
		System.out.println("showB");
	}
	@Override
	public void show() {
		System.out.println("show");
	}
}

2:默认方法重名:必须重写一次默认方法

interface A {
	public default void methodA(){}
	public default void method(){}
}
interface B {
	public default void methodB(){}
	public default void method(){}
}

# 有多个默认方法重名必须进行重写一次
public class C implements A,B{
	@Override
	public void method() {
		System.out.println("method");
	}
}

3:静态方法重名:无影响,因为可以通过接口名进行分别调用

(7):接口的继承:一个接口能继承另一个或者多个接口,这和类之间的继承比较相似。接口的继承使用 extends 关键字,子接口继承父接口的方法。如果父接口中的默认方法有重名的,那么子接口需要重写一次同时子接口和子类都可以继承多个接口,子接口,重写默认方法时,default关键字可以保留,子类重写默认方法时,default关键字不可以保留

interface A {
	public default void methodA(){}
	public default void method(){}
}
interface B {
	public default void methodB(){}
	public default void method(){}
}

# 有多个默认方法重名必须进行重写一次(子类继承多个接口)
public class C implements A,B{
	@Override
	public void method() {
		System.out.println("method");
	}
}

# 有多个默认方法重名必须进行重写一次(子接口继承多个接口)
interface D extends A,B{
	@Override
	public default void method() {
		System.out.println("DDDDDDDDDDDDDD");
	}
}

(8):接口中的其他成员特点
接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。
接口中,没有构造方法,不能创建对象。
接口中,没有静态代码块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值