JDK8新特性-介面中增強的方法
介面中增強的方法
JDK8中介面的新增
在JDK8中介面有做增強
interface 介面名{
靜態常量;
抽象方法;
}
在JDK8之後對介面做了增強,介面可以有默認方法和靜態方法。
interface 介面名{
靜態常量;
抽象方法;
默認方法;
靜態方法;
}
默認方法
為什麼要有默認方法?在JDK8以前介面只能有抽象方法和靜態常量,會存在以下的問題:
如果介面中新增抽象方法,那麼所有實現類都必須要實現這個抽象方法,非常不利於介面的擴展。
package inter;
import javax.swing.*;
public class Demo01Interface {
public static void main(String[] args) {
A b=new B();
A c=new C();
}
}
interface A{
void test1();
//介面中新增抽象方法,所有實現類都需要重寫方法,不利於介面的擴展。
void test2();
}
class B implements A{
@Override
public void test1() {
}
@Override
public void test2() {
}
}
class C implements A{
@Override
public void test1() {
}
@Override
public void test2() {
}
}
介面默認方法的語法格式
interface 介面名{
修飾符 default 返回值類型 方法名{
方法體;
}
}
實例程式碼:
package inter;
import javax.swing.*;
public class Demo01Interface {
public static void main(String[] args) {
A b=new B();
b.test3();
A c=new C();
c.test3();
}
}
interface A{
void test1();
//介面中新增抽象方法,所有實現類都需要重寫方法,不利於介面的擴展。
void test2();
/**
*
* 介面中定義默認方法
* @return
*/
public default String test3(){
System.out.println("介面中的默認方法執行了...");
return "hello";
}
}
class B implements A{
@Override
public void test1() {
}
@Override
public void test2() {
}
@Override
public String test3() {
System.out.println("B實現類中重寫了默認方法...");
return "ok";
}
}
class C implements A{
@Override
public void test1() {
}
@Override
public void test2() {
}
}
結果
B實現類中重寫了默認方法...
介面中的默認方法執行了...
Process finished with exit code 0
介面中默認方法的使用
介面中默認方法有兩種使用:
- 實現類直接調用介面的默認方法。
- 實現類重寫介面的默認方法。
靜態方法
JDK8中為介面新增了靜態方法,作用是為了介面的擴展。
語法規則
interface 介面名{
修飾符 static 返回值類型 方法名{
方法體;
}
}
示例程式碼
package inter;
import javax.swing.*;
public class Demo01Interface {
public static void main(String[] args) {
A b=new B();
b.test3();
A c=new C();
c.test3();
A.test4();
//a.test4(); 只能通過類調用,不能通過類的實例調用
}
}
interface A{
void test1();
//介面中新增抽象方法,所有實現類都需要重寫方法,不利於介面的擴展。
void test2();
/**
*
* 介面中定義默認方法
* @return
*/
public default String test3(){
System.out.println("介面中的默認方法執行了...");
return "hello";
}
/**
*
* 介面中的靜態方法
* @return
*/
public static String test4(){
System.out.println("介面中的靜態方法...");
return "hello";
}
}
class B implements A{
@Override
public void test1() {
}
@Override
public void test2() {
}
@Override
public String test3() {
System.out.println("B實現類中重寫了默認方法...");
return "ok";
}
//靜態方法無法重寫
}
class C implements A{
@Override
public void test1() {
}
@Override
public void test2() {
}
}
運行
B實現類中重寫了默認方法...
介面中的默認方法執行了...
介面中的靜態方法...
Process finished with exit code 0
介面中靜態方法的使用
介面中的靜態方法在實現類里時不能被重寫的,調用的時候只能通過介面名.靜態方法名()來調用。
兩者的區別介紹
- 默認方法通過實力調用,靜態方法通過介面名調用。
- 默認方法可以被繼承,實現類可以直接調用介面的默認方法,也可以重寫介面中默認方法。
- 靜態方法不能被繼承,實現類不能被重寫介面的靜態方法, 是能使用介面名調用。