小白学习JavaSE-day07之接口

接口

1、接口介绍

接口它是一种规范(规则),是用来约束双方的。将接口规则定义好之后,双方就可以在接口的规则下进行具体的代码实现,然后双方之间就可以进行通信。

例如:天气数据

各大网站可能都需要显示天气数据,而数据在中央气象局。中央气象局会提供获取天气的数据接口,然后各大网站可以根据这个接口规范传递数据,最终拿到某个地区的天气信息。

2、Java中提供的接口

修饰符  interface  接口名{
     
    // 定义变量
    // 定义方法    
}

接口的名称和类名的书写规范一致:多个单词每个单词首字母大写。

接口中的变量:它有固定的修饰符(public static final)

接口中的方法:JDk8之前,接口中只能定义抽象方法(public abstract)

//	定义接口
interface Inter{
     
	//	如果一个变量被final修饰,变量名一般要求全部大写
	//	转大写:ctrl + shift + x
	//	转小写:ctrl + shift + y
	public static final int NUMBER = 12;
	int AGE = 33;
	
	public abstract void demo();
	void func();	
}

因为接口中的变量和抽象方法都有默认的修饰,可以在书写的时候省略。

但是建议:在书写方法的时候,将public写着。

3、接口的使用

一般接口中的方法都是抽象方法(JDK8之前),要求必须有类去实现接口中的方法,然后创建这个类的对象,进而去使用相关的方法。

类和类之间是:继承关系,并且是单继承

class A{
     }
class B extends A{
     }
class C extends B{
     }

接口和类之间:是实现关系,使用implements关键字,并且一个类可以同时实现多个接口

interface Inter1{
     }
interface Inter2{
     }
interface Inter3{
     }
class Demo implements Inter1,Inter2,Inter3{
     
    // 如果接口中有抽象方法,需要在这个类中全部复写(实现)
    // 如果类没有将接口中的抽象方法全部复写,那么这个类依然是一个抽象类
}

接口和接口之间:是继承关系,并且是多继承

interface Inter1{
     }
interface Inter2{
     }
interface Inter3{
     }
interface Inter4 extends Inter1, Inter2 , Inter3{
     }

多个接口中即使有同名的抽象方法,最终也会被子接口继承到,但是依然是抽象方法,最终还是需要实现类将抽象方法给复写,最终依然是创建实现类的对象,调用类中复写的方法完成相关功能。


interface Inter1{
     
	public void demo();
	public void method();
}
interface Inter2{
     
	public void demo();
	public void func();
}
//	多个父接口中有同名的方法,子接口统一继承到
interface Inter3 extends Inter1 , Inter2{
     

}
//	在实现类中只需要复写一次
class Demo implements Inter3{
     
	public void demo() {
     }
	public void method() {
     }
	public void func() {
     }
}

public class InterfaceDemo {
     
	public static void main(String[] args) {
     
		Demo d = new Demo();
		d.demo();
				
	}
}

如果多个接口中存在同名的变量,在通过实现类或者子接口调用的时候也会发生不确定性,这时需要通过对应的接口名去调用变量。

interface Inter1{
     
    int X = 12;
}
interface Inter2{
     
    int X = 34;
}
interface Inter3 extends Inter1, Inter2{
     }
class Demo implements Inter3{
     
    
}
class Test{
     
    public static void main(String[] args) {
     
    	Demo d = new Demo();
        //	d.x  发生不确定性
        //  Inter1.X  或者  Inter2.X  去使用接口中的变量
    }
}

建议定义接口的时候,尽量不要重名的变量。

4、接口案例

父类和子类:它们永远属于同一个体系。父类中描述的行为(方法)一定是这个体系中共同拥有的。

接口:一般描述的行为属于整个体系之外的一些额外(特殊的行为)

/*
 * 	描述动物:猫、狗、猪,它们有共同的父类Animal
 * 	某个动物经过后天的训练具备不属于这个物种本身固有的一些行为,这些行为一般都会采用接口描述
 */
abstract class Animal{
     
	//	描述的是所有动物共性的eat行为
	public abstract void eat();
}

//	缉毒的接口
interface AntiDrug{
     
	public void antiDrug();
}

//	Dog经过后天训练具备缉毒的行为
class Dog extends Animal implements AntiDrug{
     
	public void eat() {
     
		System.out.println("啃骨头");
	}
	//	复写缉毒的行为
	public void antiDrug() {
     
		System.out.println("狗缉毒");
	}
}
class Cat extends Animal{
     
	public void eat() {
     
		System.out.println("吃鱼");
	}
}
//Pig经过后天训练具备缉毒的行为
class Pig extends Animal implements AntiDrug{
     
	public void eat() {
     
		System.out.println("吃糠");
	}
	//	复写缉毒的行为
	public void antiDrug() {
     
		System.out.println("猪缉毒");
	}
}
public class InterfaceDemo2 {
     
	public static void main(String[] args) {
     
		Dog d = new Dog();
		d.eat();
		
		Pig p = new Pig();
		p.antiDrug();
		
	}
}

5、JDK8之后的接口书写

/*
 * 	JDK8中允许在接口中定义非抽象方法
 * 	默认方法:方法需要使用default关键字修饰
 */
interface Inter{
     
	int X = 12;
	public void demo();
	//	JDK8 接口中允许书写默认方法
	default void func() {
     
		System.out.println("接口中的default方法");
		method();
	}
	//	JDK11接口中允许书写静态的方法
	static void run() {
     
		System.out.println("接口中的static方法");
		//	静态无法访问非静态
		//method();
	}
	//	JDK11接口中允许定义私有的方法
	private void method() {
     
		System.out.println("接口中的私有方法");
	}
}
//	接口的实现类后缀Impl
class InterImpl implements Inter{
     
	public void demo() {
     
		
	}
}
public class InterfaceDemo3 {
     
	public static void main(String[] args) {
     
		Inter.run();
		InterImpl ii = new InterImpl();
		ii.func();
		ii.demo();
				
	}
}

你可能感兴趣的:(学习,接口,javase)