Java面向对象之 接口: [修饰符] interface 接口名 {...};子接口:[修饰符] interface 接口名 extends 父接口,父接口2...{...}

Java面向对象之 接口: [修饰符] interface 接口名 {...};子接口:[修饰符] interface 接口名 extends 父接口,父接口2...{...}

1、什么是接口?

类比抽象类,把功能或者特性类似的一类 抽象的更彻底,可以提炼出更加特殊的“抽象类”----接口

2、如何定义接口

语法:

[修饰符] interface 接口名 {

N个常量定义...

N个抽象方法定义...

N个内部类、接口、枚举定义....

N个私有方法,默认方法或者类方法定义

}

修饰符一般为public 即可以跨包访问,绝大多数情况接口都是需要跨包访问的

3、接口特性注意:

接口修饰符public可以省略,省略后不能在包外访问,所以99%+ 实际应用中都是需要public

不支持变量定义,定义出来的变量都是常量。也就是说默认都是被隐藏的static、final修饰的类变量。

如下两行代码效果一样

int maxNum = 10;

public static final int maxNum = 10;

接口中定义的方法,认都是public (公开)、abstract (抽象) 的。必须被类实现,

java9接口中还可以定义默认方法。当实现类中没有重写方法的话,调用的就是这个默认方法。

java9接口中还可以使用private的方法。这些private 的方法就是给默认方法充当工具方法的。

示例:图形接口

package com.zmd.study.interface_example;

/**

* @ClassName Shape

* @projectName: object1

* @author: Zhangmingda

* @description: 定义一个形状接口,用于三角形或其它图形类实现功能,或者子接口继承

* date: 2021/3/30.

*/

public interface Shape {

/**

* 接口中定义的变量 默认为常量:自动被public static final 修饰

* 如下mxNum变量的定义等于:public static final int maxNum = 10;

*/

int maxNum = 10;

//public static final int maxNum = 10;

/**

* 获取平面图形的类型

*/

public abstract String getType();

/**

* 获取平面图形的周长

*/

public abstract double getPerimeter();

}

三角形类实现接口

package com.zmd.study.interface_example;

/**

* @ClassName Triangle

* @projectName: object1

* @author: Zhangmingda

* @description: 类实现了接口功能,使用implements关键字

* date: 2021/3/30.

*/

public class Triangle implements Shape {

/**

* 三角形的三边长类型定义

*/

private double a;

private double b;

private double c;

/**

* 构造方法,创建三角形实例必须提供三边长度

*/

public Triangle(double a, double b, double c) {

/**

*@params [a, b, c] 三角形三边长度

*@return null

*@创建时间 2021/3/30

*/

if(a+b < c || a+c < b || b+c < a){

System.out.println("Failed!:三角形的两边之和必须大于第三边");

return;

}

this.a = a;

this.b = b;

this.c = c;

}

@Override

public String getType() {

if(a+b < c || a+c < b || b+c < a){return "未知图形";}

return "三角形";

}

@Override

public double getPerimeter() {

return a + b + c;

}

}

测试运行

package com.zmd.study.interface_example;

/**

* @ClassName InterfaceTest

* @projectName: object1

* @author: Zhangmingda

* @description: XXX

* date: 2021/3/30.

*/

public class InterfaceTest {

public static void main(String[] args) {

Shape triangle = new Triangle(3,4,5);

System.out.println(triangle.getType());

System.out.println(triangle.getPerimeter());

}

}

/**

输出:

三角形

12.0

*/

4、接口的默认方法 default 修饰 (java 9新特性)

实现类中没有重写方法的话,调用的就是这个默认方法。

如上Shape.java中 增加default修饰的方法

package com.zmd.study.interface_example;

/**

* @ClassName Shape

* @projectName: object1

* @author: Zhangmingda

* @description: 定义一个形状接口,用于三角形或其它图形类实现功能,或者子接口继承

* date: 2021/3/30.

*/

public interface Shape {

...同上省略/**

* 定义一个默认方法;如果实现接口的类没有写这个方法,也可以使用

*/

default public void printMe(){

System.out.println("我是:" + getType() + "我的周长是:" + getPerimeter());

}

}

三角形类同上:Triangle.java

测试类实例化三角形Triangle()调用printMe()方法

public class InterfaceTest {

public static void main(String[] args) {

Shape triangle = new Triangle(3,4,5);

System.out.println(triangle.getType());

System.out.println(triangle.getPerimeter());

triangle.printMe();

}

}

/**

三角形

12.0

我是:三角形我的周长是:12.0

/*

5、接口中的private的方法(java9新特性)

作用:完全是给default 默认方法充当工具方法,当有多个default方法有共同的代码的时候,可以单独列出来。

package com.zmd.study.interface_example;

/**

* @ClassName Shape

* @projectName: object1

* @author: Zhangmingda

* @description: 定义一个形状接口,用于三角形或其它图形类实现功能,或者子接口继承

* date: 2021/3/30.

*/

public interface Shape {

...省略如上代码...

/**

* 定义一个默认方法;如果实现接口的类没有写这个方法,也可以使用

*/

default public void printMe(){

beforPrintMe();

System.out.println("我是:" + getType() + "我的周长是:" + getPerimeter());

}

/**

* java9 特性:接口可以用private 私有的方法,给default方法充当工具方法

*/

private void beforPrintMe(){

System.out.println("beforPrintMe()....干了一些活");

}

}

三角形类同上:Triangle.java

测试类实例化三角形Triangle()调用printMe()方法

package com.zmd.study.interface_example;

/**

* @ClassName InterfaceTest

* @projectName: object1

* @author: Zhangmingda

* @description: XXX

* date: 2021/3/30.

*/

public class InterfaceTest {

public static void main(String[] args) {

Shape triangle = new Triangle(3,4,5);

System.out.println(triangle.getType());

System.out.println(triangle.getPerimeter());

triangle.printMe();

}

}

/**

三角形

12.0

beforPrintMe()....干了一些活

我是:三角形我的周长是:12.0

*/

6、子接口定义(接口的继承)

语法:

[修饰符] interface 接口名 extends 父接口,父接口2...{

....同上

}

示例:

动物接口、人接口、女人接口;女人接口继承动物和人。wife 类实现女人接口。wife类就具有如上接口的default方法

动物接口

package com.zmd.study.interface_example;

public interface Animal {

default void yell(){

System.out.println("动物 啊....叫喊!!!");

}

}

人接口

package com.zmd.study.interface_example;

public interface Person {

default void makeLove(){

System.out.println("Person makeLove 啊!...哦...啊...");

}

}

女人接口

package com.zmd.study.interface_example;

public interface Woman extends Animal, Person{

}

wife类

package com.zmd.study.interface_example;

public class Wife implements Woman {

}

测试类

package com.zmd.study.interface_example;

public class InterfaceTest {

public static void main(String[] args) {

Wife wife = new Wife();

wife.yell();

wife.makeLove();

}

}

/**

动物 啊....叫喊!!!

Person makeLove 啊!...哦...啊...

*/

7、一个类实现多个接口

用一个学生类实现6中的Animal、Person接口。并增加自己的功能

学生类Student.java

package com.zmd.study.interface_example;

public class Student implements Animal,Person {

public void study(){

System.out.println("学习");

}

}

测试类

package com.zmd.study.interface_example;

/**

* @ClassName InterfaceTest

* @projectName: object1

* @author: Zhangmingda

* @description: XXX

* date: 2021/3/30.

*/

public class InterfaceTest {

public static void main(String[] args) {

Student student = new Student();

student.study();

student.yell();

student.makeLove();

}

}

/**

学习

动物 啊....叫喊!!!

Person makeLove 啊!...哦...啊...

*/

其他类似案例场景

接口实现业务逻辑课插拔,更换数据库直接改配置文件即可。

相关推荐

型数据保留几位小数_药物分析数据修约规则
《诗经·相鼠》原文、注释与赏析
2025全球十大最好的现货白银交易APP最新排名,权威推荐