关于Java接口 这里绝对有你不知道的事!!

前言:

经过这些天的学习,来到了Java基础内容中关于接口的这一部分,下面分享一下我对接口的理解。

接口的定义:

  • 使用关键字 interface 来定义接口

  • 继承接口使用关键字 implements

  • 在JDK8以前的版本接口内部只允许定义 被public static final 的全局常量,以及抽象方法

  • 在JDK8的版本以后,接口中还可以定义静态方法以及默认方法


接口的规范:

  • 接口属于定义了一种规范,就像法律一样我们每个人都得遵守,而继承接口的实现类也必须遵守接口的规则
  • 接口的实现类如果没有重写接口中的所有抽象方法,那么这个实现类一定是个抽象类,实现类重写了接口中所有的抽象方法,此实现类才能被实例化
  • 接口中没有构造器,因为接口不能被实例化,抽象类中也没有构造器
  • 当接口被实现类继承时,实现类不能修改接口中的属性,接口中的属性被 public static final 所修饰是不可修改的
  • 接口的出现打破了Java定义的单继承,意味着一个类可以同时继承多个接口

接口的使用体现java的多态性:

  • 当我们在使用接口去时,继承接口的实现类去new对象赋给接口的引用,去调用接口中被重写的方法。
public class Baseinterfaceuse {
	public static void main(String[] args) {
		USB usb=new Printer();//多态性
		Printer printer=new Printer();
		usb.start();
		printer.method();
		usb.stop();
	}

}
interface USB{
	public abstract void start();//定义一个USB的启动方法
	public abstract void stop();//定义一个USB的停止方法
}
class Printer implements  USB {
	
	
	@Override
	public void start() {
		System.out.println("USB启动");
	}
	public void method (){
		System.out.println("连接的具体细节");
		}
	@Override
	public void stop() {
		System.out.println("USB停止");
	}
	
}

接口的新特性:

  • JDK8以后的版本接口中可以定义默认方法和静态方法,接口中定义的静态方法只能通过接口.方法名来调用,而默认方法可以实现类来调用
  • 接口中默认方法的调用,如果实现类重写了接口中的默认方法,那么我们可以通过(接口名.+super.+方法名)去调用接口中的被重新的方法
  • 如果实现类实现了多个接口,而这多个接口定义了同名同参数的默认方法,在实现类中没有重写这个默认方法时会产生接口冲突
  • 类优先原则:(针对方法来说,不针对属性) 如果实现类所继承的父类和实现的接口中声明了同名同参数的方法 那么子类在没有重写此方法的情况下,默认调用父类中的方法,而不是接口中的方法
interface NewInterface {
	public static void methhof1() {
		System.out.println("NewInterface中的method1");
	}
	public default void  method2() {
		System.out.println("NewInterface中的method2");
	}
	default void method3() {
		System.out.println("NewInterface中的method3");
	}
}
interface CompareB {
	default void method3() {
		System.out.println("CompareB中的method3");
	}
}
public class Superclass {
  public void method3() {
	 System.out.println("superclass中的method3 "); }
}

}
class Sub extends Superclass implements NewInterface,CompareB{
	@Override
	public void method2() {
		System.out.println("Sub类中重写的method2");
	}
	@Override
	public void method3() {//重写metho3方法
	System.out.println("Sub类中重写的method3");
	}
public class SubclassText {
public static void main(String[] args) {
	Sub sub=new Sub();
	sub.method3();//如果Sub类中没有重写 method3这个方法,此时编译器会报错出现接口方法的碰撞,编译器不能识别  ,此时重写和输出的是父类中重写的method3方法
	Newinterface.method1;//调用接口中的静态方法  接口中的静态方法不会被继承
}
}

满满的干货呀,希望自己会常来复习这些知识。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值