Java中,接口是一种抽象类型,它允许定义方法但不提供方法的实现

概念

Java中,接口是一种抽象类型,它允许定义方法但不提供方法的实现,

接口可以被类实现,一个类可以实现一个或多个接口。

注意

1、
接口中的方法, 默认是public的抽象方法,不能被声明为private、protected,
任何实现该接口的类,必须提供这些方法的实现。

从Java 8开始,接口可以包含默认方法,使用关键字default定义,默认方法可以在接口中提供方法的默认实现。

从Java 8开始,接口可以包含静态方法,使用关键字static来定义,接口中的静态方法可以直接通过接口名调用,而不需要通过实现类的实例来调用。

静态方法实现:允许在接口中直接提供静态方法的实现,这样实现该接口的类可以选择是否覆盖该方法。
如下:


在接口中声明并实现了一个staticMethod方法,
那么,
任何实现该接口的类可以选择是否覆盖该方法,如果要覆盖该方法,则必须使用@Override注解来标记该方法。

interface MyInterface{
	static void staticMethod(){
		 System.out.println("这是接口中的静态方法");
	}
}


class MyClass implements MyInterface{
	public void myMethod(){
		// 调用接口中的静态方法
		MyInterface.staticMethod();
	}
}

class Main{
	public static void main(String[] args){
		MyClass m1 = new MyClass();
		m1.myMethod();
	}
}

需要注意的是,
静态方法属于接口本身,而不是接口的实例,
因此,静态方法不能直接访问接口的实例变量或实例方法,因为这些都属于接口的实例状态,
静态方法只能访问静态变量和其他静态方法。

2、
接口可以包含常量,这些常量默认是public和static的,它们可以在接口的任何实现类中使用,
接口中的字段默认是公共、静态和最终的,可以被类直接访问。

接口中不能包含实例变量(除非它们被声明为static、final)

3、
接口可以继承其他接口,一个接口可以继承多个其他接口,使用逗号分割

4、
多态性:通过实现接口,可以实现多态性,即一个引用变量可以指向不同类型的对象,只要这些对象都实现了该接口。

5、
设计原则:使用接口可以遵循单一职责原则,使得每个类只负责一个功能或行为,有助于提高代码的可维护性和可扩展性。

例子


// 定义一个动物接口  
public interface Animal {  
    void makeSound(); // 声明一个方法但没有实现  
}  
  
// 定义一个狗类,实现Animal接口  
public class Dog implements Animal {  
    @Override  
    public void makeSound() { // 实现Animal接口中的方法  
        System.out.println("Woof"); // 狗叫的声音是"Woof"  
    }  
}  
  
// 定义一个猫类,实现Animal接口  
public class Cat implements Animal {  
    @Override  
    public void makeSound() { // 实现Animal接口中的方法  
        System.out.println("Meow"); // 猫叫的声音是"Meow"  
    }  
}  
  
// 主类测试代码  
public class Main {  
    public static void main(String[] args) {  
        Animal myDog = new Dog(); // Animal引用变量可以指向Dog对象,因为Dog实现了Animal接口  
        Animal myCat = new Cat(); // 同理,Animal引用变量也可以指向Cat对象  
        myDog.makeSound(); // 输出"Woof" - 因为是Dog对象实现的makeSound()方法  
        myCat.makeSound(); // 输出"Meow" - 因为是Cat对象实现的makeSound()方法  
    }  
}

你可能感兴趣的:(java,java)