Java学习路线-6:接口(1)

简介: Java学习路线-6:接口

第20 章 : 接口的定义与使用

87 接口基本定义

抽象类比普通类的

优势:可以对子类覆写方法控制,

缺点:涉及安全操作问题

接口:纯粹的抽象类,抽象方法和全局常量

JDK 1.8 Lambda

定义,接口名前加入字母I

interface I类名{}

1、接口需要被子类实现implements,一个子类可以实现多个父接口

2、子类如果不是抽象类,一定要覆写接口中全部抽象方法

3、接口对象可以利用子类对象的向上转型进行实例化

实现接口类增加后缀:Impl

// 定义接口
interface IMessage{
    // 全局常量
    public static final String NAME = "Tom" ;
    // 抽象方法
    public abstract String getInfo() ; 
}
interface IChanel{     
    // 抽象方法
    public abstract boolean connect() ; 
}
// 实现接口
class MessageImpl implements IMessage, IChanel{
    public  String getInfo() {
        return "hi " + NAME ;
    } 
    public boolean connect() {
        return true;
    }
}
class Demo{
    public static void main(String[] args) {
        IMessage message = new MessageImpl();
        System.out.println(message.getInfo());
    }
}

利用接口,子类可以实现多实现

MessageImpl 是 IMessage, IChanel 两个接口的实现子类

接口不能继承父类


Object类对象可以接收所有数据类型

包括:基本数据类型,类对象,接口对象,数组


接口描述的公共定义标准,默认public, 覆写只能是public


以下两种写法等价

interface IMessage{
    public static final String NAME = "Tom" ;
    public abstract String getInfo() ; 
}
interface IMessage{
    String NAME = "Tom" ;
    String getInfo() ; 
}

一个抽象类可以实现多个父接口

一个普通类可以继承一个抽象类,实现多个父接口, 先继承再实现

接口中可以省略 abstract, 抽象类中不能省略

// 定义接口
interface IMessage{
    // 全局常量
    public static final String NAME = "Tom" ;
    // 抽象方法
    public abstract String getInfo() ; 
}
interface IChanel{     
    // 抽象方法
    public abstract boolean connect() ; 
}
abstract class DatabaseAbstract{
    public abstract boolean getConnect();
}
// 单继承多实现
class MessageImpl extends DatabaseAbstract implements IMessage, IChanel{
    public  String getInfo() {
        return "hi " + NAME ;
    } 
    public boolean connect() {
        return true;
    }
    public boolean getConnect(){
        return true;
    }
}
class Demo{
    public static void main(String[] args) {
        IMessage message = new MessageImpl();
        System.out.println(message.getInfo());
    }
}

接口多继承

接口无法继承一个父类,可以继承多个父接口

// 定义接口
interface IMessage{
    public abstract String getInfo() ; 
}
interface IChanel{     
    public abstract boolean connect() ; 
}
interface IServer extends IMessage, IChanel{
    public abstract boolean getConnect();
}
class MessageImpl implements IServer{
    public  String getInfo() {
        return "";
    } 
    public boolean connect() {
        return true;
    }
    public boolean getConnect(){
        return true;
    }
}
class Demo{
    public static void main(String[] args) {
        IMessage message = new MessageImpl();
    }
}

接口三种使用形式

1、进行标准设置

2、表示一种操作能力

3、暴露远程方法视图,一般在RPC分布式开发使用

88 接口定义加强

JDK < 1.8

如果接口设计不当,增加方法难以维护

增加过渡抽象类实现接口,再用子类继承抽象类

JDK >= 1.8

允许接口中定义普通方法

// 定义接口
interface IMessage{
    public abstract String getInfo() ; 
}
// 过渡抽象类
abstract class MessageImpl implements IMessage{
    public abstract String getInfo();
    // 扩充的新方法
    public String getMessage(){
        return "message" ;
    }
}
class Message extends MessageImpl{
    public String getInfo(){
        return "info";
    }
}
class Demo{
    public static void main(String[] args) {
        Message message = new Message();
        System.out.println(message.getInfo()); // info
        // 调用新方法
        System.out.println(message.getMessage()); // message
    }
}

接口中增加default普通方法

// 定义接口
interface IMessage{
    public abstract String getInfo() ; 
    // 扩充的新方法
    public default String getMessage(){
        return "message" ;
    }
}
class Message implements IMessage{
    public String getInfo(){
        return "info";
    }
}
class Demo{
    public static void main(String[] args) {
        Message message = new Message();
        System.out.println(message.getInfo()); // info
        // 调用新方法
        System.out.println(message.getMessage()); // message
    }
}

接口中可以增加static方法

// 定义接口
interface IMessage{
    public abstract String getInfo() ; 
    public static IMessage getInstance(){
        return new Message();
    }
}
class Message implements IMessage{
    public String getInfo(){
        return "info";
    }
}
class Demo{
    public static void main(String[] args) {
        IMessage message = IMessage.getInstance();
        System.out.println(message.getInfo()); // info
    }
}

接口中不建议使static 和default

相关文章
|
15天前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
119 3
|
22天前
|
SQL Java 数据库
2025 年 Java 从零基础小白到编程高手的详细学习路线攻略
2025年Java学习路线涵盖基础语法、面向对象、数据库、JavaWeb、Spring全家桶、分布式、云原生与高并发技术,结合实战项目与源码分析,助力零基础学员系统掌握Java开发技能,从入门到精通,全面提升竞争力,顺利进阶编程高手。
264 0
|
25天前
|
SQL 算法 Java
零基础到精通的史上最强 Java 学习路线图推荐
史上最全Java学习路线图,涵盖基础语法、面向对象、数据结构与算法、多线程、JVM、Spring框架、数据库及项目实战,助你从零基础到精通Java开发,附完整代码与工具推荐。
97 3
零基础到精通的史上最强 Java 学习路线图推荐
|
5天前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
69 1
|
14天前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
66 11
|
1月前
|
NoSQL Java 关系型数据库
超全 Java 学习路线,帮你系统掌握编程的超详细 Java 学习路线
本文为超全Java学习路线,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架(如Spring Boot)、数据库(MySQL、Redis)及项目实战等内容,助力从零基础到企业级开发高手的进阶之路。
150 1
|
1月前
|
前端开发 Java 数据库连接
帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
321 3
|
27天前
|
SQL 算法 Java
适合自学的史上最强 Java 学习路线图分享
本路线图系统讲解Java从入门到进阶的学习路径,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架如Spring、数据库操作及项目实战,助你全面掌握Java开发技能,适合零基础及进阶学习。
195 0
|
27天前
|
Java API 数据库
2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
355 0
|
1月前
|
缓存 Java API
2025 年小白也能轻松上手的 Java 最新学习路线与实操指南深度剖析
2025年Java最新学习路线与实操指南,涵盖基础语法、JVM调优、Spring Boot 3.x框架、微服务架构及容器化部署,结合实操案例,助你快速掌握企业级Java开发技能。
225 0

热门文章

最新文章