interface 接口类


接口是一种引用数据类型,最重要的内容就是其中的 抽象方法。

    

定义一个接口格式(普通);

public interface  接口名称 {

//接口的内容

}

接口名称 每个单词首字母都用英文大写(大驼峰格式),和类名称是一样的。 

附加:

如果的Java7, 那么接口中内容包含了

1.常量           2.抽象方法

Java8,        

3.默认方法    4.静态方法 

Java9,

5.私有方法

 

 

接口的抽象方法定义。

创建一个接口类(父类);

 

 

 1 public interface MyInterfaceAbstract {
 2 
 3 
 4 
 5     public abstract void methodAbs1();
 6     public abstract void methodAbs2();
 7     public abstract void methodAbs3();
 8     public abstract void methodAbs4();
 9     //抽象方法
10     //抽象方法里的public absstract这2个关键字可以不写,但在初学阶段不要不写,以免发生混淆。
11 
12 }

 

 

接口的抽象方法使用:

接口使用步骤;

1,接口不能直接使用,必须有一个“实现类”来“实现”该接口。

格式:
public class 实现类名称 implements 接口名称{

   //。。。。

}

 

2,接口实现类必须覆盖重写 (实现)接口中所有的抽象方法。

实现:去掉abstract关键字,加上方法体大括号。

 

3,创建实现类的对象,进行使用。

   

创建一个实现类(子类);

在实现类名称后面加上  impl  ,方便查看知道 是某某的实现类。

 1 public class MyInterfaceAbseractImpl implements MyInterfaceAbstract {
 2     @Override
 3     public void methodAbs1() {
 4         System.out.println("这是第一个方法" );
 8     }
 9 
10     @Override
11     public void methodAbs2() {
12         System.out.println("这是第二个方法" );
14     }
15 
16     @Override
17     public void methodAbs3() {
18         System.out.println("这是第三个方法" );
19 
20     }
21 
22     @Override
23     public void methodAbs4() {
24         System.out.println("这是第四个方法" );
25 
26     }
27 }

 

类:

 1 public class Demo01Interface {
 2     public static void main(String[] args) {
 3         //错误写法! 不能直接new接口对象。
 4        // MyInterfaceAbstract inter = new MyInterfaceAbstract();
 5         
 6         //创建实现类的对象使用
 7         MyInterfaceAbseractImpl Impl = new MyInterfaceAbseractImpl();
 8         Impl.methodAbs1();
 9         Impl.methodAbs2();
10         Impl.methodAbs3();
11         Impl.methodAbs4();
12     }
13 }
14    

 

注意事项:
1,如果 实现类并没有覆盖重写接口中所以抽象方法,那么 这个实现类自己就必须是抽象类。、

2,此时 不能new接口对象(父类名称),要new实现类(子类)

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

接口的默认方法定义

 default(关键词)

1,接口默认方法,可以通过接口实现类对象,直接调用。

2,接口的默认方法,也可以被接口实现类进行覆盖重写。

 

从Java8开始,接口允许定义默认方法。

格式;

public default  返回值类型 方法名称 (参数列表){

         方法体

}

 

接口 父类:

 1 public interface MyInterfaceAbstract {
 2 
 3 
 4 
 5     public abstract void methodAbs1();
 6     public abstract void methodAbs2();
 7     public abstract void methodAbs3();
 8     public abstract void methodAbs4();
 9 
10     //新添加的方法。改成默认方法
11     public default void methodAbs5(){
12         System.out.println("这是新添加的默认方法");
13     }
14 
15 
16 
17 }

 

 

 

 

实现类;

 

1 public class MyInterfaceDefaultImpl implements MyInterfaceDefault {
2 
3     @Override
4     public void methodAbs1() {
5         System.out.println("实现类抽象方法,AAA");
6     }
7 
8  
9 }

 

 

类:

 1 public class Demo02Interface {
 2     public static void main(String[] args) {
 3 
 4 
 5         //创建了实现类对象
 6         MyInterfaceDefaultImpl az = new MyInterfaceDefaultImpl();
 7         az.methodABS();//调用抽象方法,实际运行的是右侧实现类。
 8         

//调用默认方法。如果实现类当中没有的话,会向上找接口。 9 az.methodABS5(); 10 11 } 12 }

 

 

 

 

默认方法有个特殊用法;

接口类(父类)定义好了默认方法,但现实类(子类)没有定义, 类也可以正常打印调用的,

即使实现类(子类)没有覆盖重写接口类(父类) ,但Java编译器会往上找的。

还有一点需要补充;

如果接口类(父类)和实现类(子类)都有相同名字的默认方法的话,优先用实现类(子类)的。

 

 

在创建一个实现类,然后在普通类输出:new上实现类名称, 实现类名称 .  (父类方法名称)();

就能打印出父类的方法体了。

 

 

 

++++++++++++++++++++++++++++++++++++++

接口的静态方法定义 和使用

从java8开始, 接口当中允许定义静态方法。

格式;

public static 返回值类型 方法名称 (参数列表) {

    方法体

}

注意事项:就是将abstract或者default换成static即可,带上方法体。

正确用法:通过接口名称,直接调用其中的静态方法。

格式;

 

 

 

接口类(父类):

1 public interface MyInterfaceStatic {
2 
3     public static void methodStatic(){
4         System.out.println("这是接口的静态方法!");
5 
6     }
7 
8 }

实现类(子类):{在这种情况下 可以不用创建实现类,直接调用就可以了}

1 public class MyInterfaceStaticImpl implements MyInterfaceStatic{
2     
3 }   
4 
5

 

类(输出类);

 1 public class DemoInterface {
 2 
 3     public static void main(String[] args) {
 4 
 5         //创建了实现类对象,
 6         //如果在调用父类的静态方法的话 就是不用创建实现类对象了
 7        MyInterfaceStaticImpl impl= new MyInterfaceStaticImpl();
 8 
 9         //错误写法!
10        // impl.methodStatic();
11         
12         //直接通过接口名称调用静态方法    
(父类名称 . 方法名称();)
13 MyInterfaceStatic.methodStatic(); 14 15 } 16 }

 注意::静态 对类(子类)有关系 ,既然这样 那就不用多余的 new创建类型类了(父类)

直接通过类名称 调用静态方法就可以了

++++++++++++++++++++++++++++++++++++++++++++

 

接口私有方法定义和使用。

 

假设:如果是有两个方法体之间有重复类容太多了,就需要抽取一把。

问题描述;

1,我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题。

2,但是z这个共有方法不应该让实现类使用,应该是私有化的。

 

解决方案:
从Java8 开始,接口当中允许定义私有方法。

1.普通私有方法:解决多个默认方法之间重复代码问题。

格式;

private  返回值类型 方法名称(参数列表){

   方法体

}

例子:

接口;

 1 public interface MyInterfaceDefault {
 2 
 3 
 4     public default void method1() {
 5         System.out.println("这是默认方法aaa");
 6         Common();
 7 
 8 
 9     }
10     public default void method2() {
11         System.out.println("这是默认方法bbb");
12         Common();
13 
14     }
15 
16     private void Common(){
17         System.out.println("AAA");
18         System.out.println("BBB");
19         System.out.println("CCC");
20     }
21 
22 
23 
24 }

 

类;

1 public class Demo02Interface {
2     public static void main(String[] args) {
3 
4         MyInterfaceDefaultImpl a = new MyInterfaceDefaultImpl();
5        a. method1();
6        a. method2();
7     }

 

 

 

 

2.静态私有方法:解决多个静态方法之间重复代码问题。

格式;

private static 返回值类型  方法名称(参数列表){

   方法体

}

 例子;

接口类;

 1 public interface MyInterfaceDefault {
 2 
 3 
 4     public static void method1() {
 5         System.out.println("这是静态方法aaa");
 6         Common();
 7 
 8 
 9     }
10 
11     public static void method2() {
12         System.out.println("这是静态方法bbb");
13         Common();
14 
15     }
16 
17     private static void Common() {
18         System.out.println("AAA");
19         System.out.println("BBB");
20         System.out.println("CCC");
21     }
22 
23 
24 }

 类;

1 public class Demo02Interface {
2     public static void main(String[] args) {
3 
4         MyInterfaceDefault.method1();
5         MyInterfaceDefault.method2();
6     }
7 }

 

效果图;

 

注意事项;私有方法在接口创建后,实现类和类是无法进行其他操作的,它只能在接口特给默认方法和静态方法使用的。

 

 

 

接口的常量定义和使用。

接口当中也可以定义“成员变量”,但是必须使用public static final三个关键字进行修饰。

从效果上看,这其实就是接口的【常量】。

格式;

public static final 数据类型 常量名称 = 数据值;

备注;

一旦使用final关键字进行修饰,说明不可改变。

注意事项;

1,接口当中的常量,可以省略public static final,但注意,不写它也照样是这样。

2,接口当中的常量。必须进行赋值,不能不赋值。

3,接口中常量的名称,使用完全大写字母,用下划线进行分割。(推荐命名规则)。

(灰色的字体,可以不写,但效果照样可以实现的)考虑到初学,建议 还是写上,便于理解。

 

例子;

1 public interface MyIntfaceconst {
2     
3     public static final int NUM_OF_MY_CLASS = 10;
4 }

 

1 public class Scout {
2     public static void main(String[] args) {
3 
4         System.out.println(MyIntfaceconst.NUM_OF_MY_CLASS);
5     }
6 }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM