ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

39--接口二

2021-03-12 18:58:22  阅读:129  来源: 互联网

标签:39 -- void System 接口 Aimpl 默认 m2 public


Java 8中,你可以为接口添加静态方法和默认方法。
静态方法:使用 static 关键字修饰。可以通过接口直接调用静态方法,并执行 其方法体。我们经常在相互一起使用的类中使用静态方法。
默认方法:默认方法使用 default 关键字修饰。可以通过实现类对象来调用。
实例:

package com.qwy;

public interface A {
	//定义静态方法
	public static void m1(){
		System.out.println("A.m1()");
	}
	//定义默认方法
	public default void m2(){
		System.out.println("A.m2()");
	}
}
class Test{
	public static void main(String[] args) {
		//调用接口A中的m1()方法
		A.m1();
	}
}

实例:接口中定义的静态方法,只能通过接口来调用。

package com.qwy;

public interface A {
	//定义静态方法
	public static void m1(){
		System.out.println("A.m1()");
	}
	//定义默认方法
	public default void m2(){
		System.out.println("A.m2()");
	}
}
class Aimpl implements A{
	
}
class Test{
	public static void main(String[] args) {
		Aimpl aimpl= new Aimpl();
		//错误:接口中定义的静态方法,只能通过接口来调用
		//aimpl.m1();
		//调用接口中的默认方法
		aimpl.m2();
		
	}
}

运行结果:A.m2()
此时的实现类没有对接口中的默认方法进行重写,执行的是接口的默认方法
实例:实现类对接口中的默认方法进行重写

package com.qwy;

public interface A {
	//定义静态方法
	public static void m1(){
		System.out.println("A.m1()");
	}
	//定义默认方法
	public default void m2(){
		System.out.println("A.m2()");
	}
}
class Aimpl implements A{
	//重写接口中的默认方法
	public  void m2(){
		System.out.println("Aimpl.m2()");
	}
}
class Test{
	public static void main(String[] args) {
		Aimpl aimpl= new Aimpl();
		//调用接口中的默认方法
		aimpl.m2();
		
	}
}

运行结果:Aimpl.m2()
结论:如果实现类重写了接口中的默认方法,调用时,仍然调用的是重写以后的方法
实例:父类和接口中有同样的方法,子类没有重写

package com.qwy;

public interface A {
	//定义静态方法
	public static void m1(){
		System.out.println("A.m1()");
	}
	//定义默认方法
	public default void m2(){
		System.out.println("A.m2()");
	}
}
class B{
	public  void m2(){
		System.out.println("B.m2()");
	}
}
class Aimpl extends B implements A{
	
	//子类没有对接口中的默认方法进行重写
}
class Test{
	public static void main(String[] args) {
		Aimpl aimpl= new Aimpl();
		//调用接口中的默认方法
		aimpl.m2();
		
	}
}


运行结果:B.m2()
结论:如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的默认方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法。

实例:父类和接口中有同样的方法,子类重写

package com.qwy;

public interface A {
	//定义静态方法
	public static void m1(){
		System.out.println("A.m1()");
	}
	//定义默认方法
	public default void m2(){
		System.out.println("A.m2()");
	}
}
class B{
	public  void m2(){
		System.out.println("B.m2()");
	}
}
class Aimpl extends B implements A{
	//重写
	public  void m2(){
		System.out.println("Aimpl.m2()");
	}
}
class Test{
	public static void main(String[] args) {
		Aimpl aimpl= new Aimpl();
		//调用接口中的默认方法
		aimpl.m2();
		
	}
}

运行结果:Aimpl.m2()
结论:执行被重写过的方法
实例:其他

package com.qwy;

public interface A {
	//定义默认方法
	public default void m2(){
		System.out.println("A.m2()");
	}
}

class B{
	public  void m2(){
		System.out.println("B.m2()");
	}
}
class Aimpl extends B implements A{
	public  void m2(){
		System.out.println("Aimpl.m2()");
	}
	public void method(){
		m2();//调用自己重写过的方法
		super.m2();//调用父类中的方法
		A.super.m2();//调用接口中默认方法
	}
}
class Test{
	public static void main(String[] args) {
		Aimpl aimpl= new Aimpl();
		aimpl.method();
	}
}

运行结果:
Aimpl.m2()
B.m2()
A.m2()
结论:在实现类中可以使用**supper.方法名()方式调用父类的方法,使用接口名.super.方法名()**方式调用接口中默认的方法。

标签:39,--,void,System,接口,Aimpl,默认,m2,public
来源: https://blog.csdn.net/qwy715229258163/article/details/114702461

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有