当前位置:

首页 > 编程开发 > JAVA接口与抽象类怎么使用

JAVA接口与抽象类怎么使用

接口概述当需要从几个类中派生出一个类,继承他们所有的属性和方法,JAVA没有多重继承需要用接口实现从几个类中抽取出一些共同的行为特征,而他们之间又没有is-a的关系,也需要借助接口实现接口本质是契约,规范使用接口中使用interface来定义接口和类是两个不同的结构接口中不能定义构造器(也就不能实例化)接口通过类来实现implementsJAVA类可以实现多个接口格式:classAAextendsBBinterfaceCC,DD接口与接口之间可以继承,并且可以多继承接口体现了多态性publicclassU

本文目录

    JAVA接口与抽象类怎么使用

    接口

    概述

    1. 当需要从几个类中派生出一个类,继承他们所有的属性和方法,JAVA没有多重继承需要用接口实现

    2. 从几个类中抽取出一些共同的行为特征,而他们之间又没有is-a的关系,也需要借助接口实现

    3. 接口本质是契约,规范

    使用

    1. 接口中使用interface来定义

    2. 接口和类是两个不同的结构

    3. 接口中不能定义构造器(也就不能实例化)

    4. 接口通过类来实现implements

    5. JAVA类可以实现多个接口格式:class AA extends BB interface CC,DD

    6. 接口与接口之间可以继承,并且可以多继承

    7. 接口体现了多态性

    public class UsbTest {
        public static void main(String[] args) {
            Computer com =new Computer();
            Flash flash=new Flash();
            com.transferData(flash); // USB usb =new Flash()
            com.transferData(new Printer());
            /*
    		* U盘开始工作
    		* 传输数据
    		* U盘结束工作
    		* 打印机开始工作
    		* 传输数据
    		* 打印机结束工作
    		* 
    		* */
        }}class Computer{
        public void transferData(USB usb){
            usb.start();
            System.out.println("传输数据");
            usb.stop();
        }}interface USB{
        void start();
        void stop();}class Flash implements USB{
    
        @Override
        public void start() {
            System.out.println("U盘开始工作");
        }
    
        @Override
        public void stop() {
            System.out.println("U盘结束工作");
    
        }}class Printer implements USB{
    
        @Override
        public void start() {
            System.out.println("打印机开始工作");
    
        }
    
        @Override
        public void stop() {
            System.out.println("打印机结束工作");
    
        }}
    1. JDK8的写法

    • 接口中定义的静态方法,只能通过接口调用

    • 通过实现类的对象,可以实现接口中的默认方法

    • 如果子类(或者实现类)继承的父类和实现的接口中声明了同名同参数方法,如果子类没有重写该方法,调用的是父类中同名同参数方法

    public class JDK8Test {
        public static void main(String[] args) {
            SubClass sub =new SubClass();
            CompareA.methods1();
            sub.methods2();
            /*
            * Compare 北京
    		* Compare 上海
            */
        }}class SubClass implements CompareA{}interface CompareA{
        public static void methods1() {
            System.out.println("Compare 北京");
        }
        public default void methods2() {
            System.out.println("Compare 上海");
        }}

    代理模式

    1. 代理模式就是为其他对象提供一种代理以控制对这个对象的访问

    2. 实例

    public class NetWorkTest {
        public static void main(String[] args) {
            Server server=new Server();
            ProxyServer proxyServer=new ProxyServer(server); // 放的是被代理对象进去
            proxyServer.browse(); // 调用的是代理对象,但结果是真实对象的方法被调用
            /*
            * 检查工作
    		* 真实服务器访问网络
            */
        }}interface NetWork{
        void browse();}// 被代理类class Server implements NetWork{
    
        @Override
        public void browse() {
            System.out.println("真实服务器访问网络");
        }}// 代理类class ProxyServer implements NetWork{
        private NetWork work;
        public ProxyServer(NetWork work){
            this.work=work;
        }
        public void check(){
            System.out.println("检查工作");
        }
    
        @Override
        public void browse() {
            check();
            work.browse();
        }}

    内部类

    1. JAVA允许将一个类A声明在另一个类B中,则类A是内部类,类B是外部类

    2. 内部类分类

    • 成员内部类

      • 静态 static

      • 非静态

    • 局部内部类

      • 方法内

      • 代码块内

      • 构造器内

    1. 实例化内部类对象

    public class InnerClassTest {
        public static void main(String[] args) {
            // 实例化Dog,静态类
            Pseson.Dog dog=new Pseson.Dog();
            dog.eat();
            // 吃骨头
            // 实例化Cat,非静态类
            Pseson p1 =new Pseson();
            Pseson.Cat cat=p1.new Cat();
            cat.eat();
            // 猫吃鱼
        }}class Pseson{
        String name;
        int age;
        public void eat(){
            System.out.println("吃饭");
        }
        static class Dog{
            String name;
            int age;
            public void eat(){
                System.out.println("吃骨头");
            }
        }
        class Cat{
            public void eat(){
                System.out.println("猫吃鱼");
            }
        }}
    1. 调用外部类结构

    public class InnerClassTest {
        public static void main(String[] args) {
            // 实例化Cat,非静态类
            Pseson p1 =new Pseson();
            Pseson.Cat cat=p1.new Cat();
            cat.eat();
            cat.display("小花");
            /*
            * 小花
            * 波斯猫
            * 人
            */ 
        }}class Pseson{
        String name="人";
        int age;
        public void eat(){
            System.out.println("吃饭");
        }
        static class Dog{
            String name;
            int age;
            public void eat(){
                System.out.println("吃骨头");
            }
        }
        class Cat{
            String name="波斯猫";
            public void eat(){
                System.out.println("猫吃鱼");
            }
            public void display(String name){
                System.out.println(name); // 方法中name
                System.out.println(this.name); // 内部类中name
                System.out.println(Pseson.this.name); // 外部类中name
    
            }
        }}
    1. 接口与抽象类

    • 相同点:不能实例化;都包含抽象方法;能被继承

    • 不同点:抽象类有构造器,接口没有构造器;抽象类只有单继承,而接口可以多继承;抽象类extands继承,接口implements实现

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。