初识“多继承小帮手”-接口 | 带你学《Java面向对象编程》之五十七

简介: 众所周知,Java中只允许单继承,但在实际应用中不免会有多继承的要求,此时,接口便应运而生了。

上一篇:带你领会JDK的灵活拆装 | 带你学《Java面向对象编程》之五十六
【本节目标】
通过阅读本节内容,你将初步了解接口的概念与其定义、实现方法,学会借助接口实现多继承的概念。
当你可以灵活地使用抽象类和接口进行设计的时候,那么基本上就表示面向对象的概念理解了。这一步是需要大量的程序代码累积而成。

接口基本定义

抽象类与普通类相比,最大的优势在于:可以实现子类覆写方法的控制,但是在抽象类中可能依然会保留普通方法,而普通方法里面可能会涉及到一些安全或者隐私的操作问题,那么这样在进行开发的过程之中,如果要想对外部隐藏全部的实现细节,则可以通过接口来进行描述。
接口可以理解为一个纯粹的抽象类(最原始的定义接口之中是只包含有抽象方法与全局常量的)但是从JDK1.8开始,由于引入了Lambda表达式的概念,所以接口的定义也得到了加强,除了抽象方法与全局常量之外,还可以定义普通方法或静态方法。如果从设计本身的角度来讲,接口之中的组成还是应该以抽象方法和全局常量为主。
在Java中接口主要使用interface关键字来进行定义。
范例:定义一个接口

//由于类名称和接口名称的定义要求相同,所以为了区分出接口,接口名称前往往会加入字母I(interface的简写)
interface IMessage {    //定义了一个接口
    public static final String INFO = “www.mldn.cn” ;  //全局常量
    public abstract String getInfo() ;    //抽象方法
}

但是现在很明显的问题出现了,此时的接口肯定无法直接产生实例化对象。所以对于接口的使用原则如下:

  • 接口需要被子类实现(implements),一个子类可以实现多个接口;
  • 子类(如果不是抽象类)那么一定要覆写接口之中的全部抽象方法;
  • 接口对象可以利用子类对象的向上转型进行实例化。

范例:定义接口子类

interface IMessage {    //定义了一个接口
    public static final String INFO = “www.mldn.cn” ;  //全局常量
    public abstract String getInfo() ;    //抽象方法
}
class MessageImpl implements IMessage {    //实现了接口
    public String getInfo() {
        return “得到一个消息,秘密的消息,有人胖了。”
    }
}
public class JavaDemo {
    public static void main(String args[]) {
        IMessage msg = new MessageImpl() ;
        System.out.println(msg.getInfo()) ;
        System.out.println(IMessage.INFO) ;  //直接输出全局变量
    }
}

执行结果:
得到一个消息,秘密的消息,有人胖了。
www.mldn.cn

以上是接口的基本使用,但是在Java中之所以使用接口,主要的目的是一个子类可以实现多个接口,利用接口可以实现多继承的概念。
范例:观察子类实现多个父接口

interface IMessage {    //定义了一个接口
    public static final String INFO = “www.mldn.cn” ;  //全局常量
    public abstract String getInfo() ;    //抽象方法
}
interface IChannel {
    public abstract boolean connect() ;   //定义抽象方法
}
class MessageImpl implements IMessage, IChannel{    //实现了接口
    public String getInfo() {
        if(this.connect()) {
           return “得到一个消息,秘密的消息,有人胖了。”
        }
        return “通道创建失败,无法获取消息。”
    }
    public boolean connect() {
        System.out.println(“消息发送通道已经成功建立。”) ;
        return true ;
    }
}
public class JavaDemo {
    public static void main(String args[]) {
        IMessage msg = new MessageImpl() ;
        System.out.println(msg.getInfo()) ;
    }
}

执行结果:
消息发送通道已经成功建立。
得到一个消息,秘密的消息,有人胖了。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:千字打通接口的任督二脉 | 带你学《Java面向对象编程》之五十八
更多Java面向对象编程文章查看此处

相关文章
|
1天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
15 6
|
1天前
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
【10月更文挑战第16天】Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。通过 hashCode() 和 equals() 方法实现唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 添加和遍历元素,体现了 Set 的高效性和简洁性。
12 4
|
3天前
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。它通过 hashCode() 和 equals() 方法确保元素唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 实现这一特性。
12 5
|
1天前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
7 2
|
3天前
|
存储 Java 数据处理
在Java集合框架中,Set接口以其独特的“不重复”特性脱颖而出
【10月更文挑战第14天】在Java集合框架中,Set接口以其独特的“不重复”特性脱颖而出。本文通过两个案例展示了Set的实用性和高效性:快速去重和高效查找。通过将列表转换为HashSet,可以轻松实现去重;而Set的contains方法则提供了快速的元素查找功能。这些特性使Set成为处理大量数据时的利器。
12 4
|
3天前
|
Java
Java Set 是一个不包含重复元素的集合接口,确保每个元素在集合中都是唯一的
【10月更文挑战第14天】Java Set 是一个不包含重复元素的集合接口,确保每个元素在集合中都是唯一的。本文介绍了 Set 的独特特性和两个常用实现类:基于哈希表的 HashSet 和基于红黑树的 TreeSet。通过示例代码展示了它们如何高效地处理唯一性约束的数据。
15 3
|
3天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其独特的“不重复性”要求,彻底改变了处理唯一性约束数据的方式。
【10月更文挑战第14天】从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其独特的“不重复性”要求,彻底改变了处理唯一性约束数据的方式。本文深入探讨Set的核心理念,并通过示例代码展示了HashSet和TreeSet的特点和应用场景。
11 2
|
Java 编译器
聊聊java中的多继承,解决Java8接口default方法多继承冲突问题【享学Java】(下)
聊聊java中的多继承,解决Java8接口default方法多继承冲突问题【享学Java】(下)
聊聊java中的多继承,解决Java8接口default方法多继承冲突问题【享学Java】(下)
|
安全 JavaScript 前端开发
聊聊java中的多继承,解决Java8接口default方法多继承冲突问题【享学Java】(上)
聊聊java中的多继承,解决Java8接口default方法多继承冲突问题【享学Java】(上)
聊聊java中的多继承,解决Java8接口default方法多继承冲突问题【享学Java】(上)
|
4天前
|
安全 Java UED
Java中的多线程编程:从基础到实践
本文深入探讨了Java中的多线程编程,包括线程的创建、生命周期管理以及同步机制。通过实例展示了如何使用Thread类和Runnable接口来创建线程,讨论了线程安全问题及解决策略,如使用synchronized关键字和ReentrantLock类。文章还涵盖了线程间通信的方式,包括wait()、notify()和notifyAll()方法,以及如何避免死锁。此外,还介绍了高级并发工具如CountDownLatch和CyclicBarrier的使用方法。通过综合运用这些技术,可以有效提高多线程程序的性能和可靠性。