首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

Java抽象类和接口 小白版

编程知识
2024年08月14日 22:43

什么是抽象

抽象就是从多个事物中将共性的,本质的内容抽象出来。

什么是抽象类

Java语言中,用abstract关键字修饰的类叫作抽象类。类本身是不存在的,所以抽象类无法创建对象无法实例化。

在面向对象领域,抽象类主要用来进行类型隐藏。

什么是抽象方法

抽象类中用关键字abstract修饰的方法叫做抽象方法(只有声明,没有方法体)

例:

public abstract class Car{ //抽象类
    public abstract void start(); //抽象方法
}

抽象类的好处

  1. 可以复用代码

  2. 利用多态隐藏实现类类型,得到更高的灵活性

抽象类的特点

  1. 抽象类,其修饰符必须为public或者protected,不能是private,因为创建抽象类,就是要被其他类继承;
  2. 抽象类不能实例化对象,要通过其普通子类进行实例化;
  3. 普通类继承抽象类,则该普通类一定要重写父类的抽象方法;
  4. 即使不包括任何abstract方法,亦可将一个类声明成抽象类;
  5. 抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类。

抽象类和具体类的区别

抽象类只有方法的声明,没有方法体(具体实现),所以抽象类不能实例化对象;

具体类所有的方法包含方法的声明和方法体,所以具体类可以实例化对象。

实例

abstract class Door {

    public int weight;

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public abstract void open();
    public abstract void close();
}
class WoodenDoor extends Door{
    public void open(){
        System.out.println("Opening wooden door");
    }
    public void close(){
        System.out.println("Closing wooden door");
    }
}
class IronDoor extends Door{
    public void open(){
        System.out.println("Opening iron door");
    }
    public void close(){
        System.out.println("Closing iron door");
    }
}
public class Main{
    public static void main(String[] args) {
        Door door = new WoodenDoor();//向上类型转换(多态)
        door.open();
        door.close();
        door.setWeight(10);
        System.out.println(door.getWeight());

        door = new IronDoor();
        door.open();
        door.close();
    }
}

什么是接口

接口是一套规范或标准。接口只规定必须实现的功能或要求,但是没有规定如何实现或达到。接口通常用 interface 来声明。

接口的定义格式

interface 接口名{
    接口方法
}
  • 接口间多继承格式
interface 接口名 extends 接口名1,接口名2,...{
    ...
}

接口的作用

对外提供统一的接口方法,隐藏接口方法的实现细节。

接口的特点

  1. 所有接口方法都是抽象方法(只有方法声明,没有方法实现)
  2. 接口不能实例化对象,但类可以使用implements 关键字实现接口(一个类可以实现多个接口)
  3. 类实现接口必须实现所有接口方法(否则这个类必须定义成抽象类)
  4. 接口中可以定义静态成员变量(但必须用 final 修饰,即变量值不能更改)
  5. 接口中的方法是不能在接口中实现的,只能由实现这个接口的类来实现接口中的方法,接口中的方法都是公有的。
  6. 一个接口不能继承其他类,但是可以继承别的接口。

接口的优点

  1. 接口可以用来对类提供规范或标准(避免类在设计上的不一致性)
  2. 接口可用于间接实现多重继承(使用接口为实现类添加额外功能)
  3. 接口可以使设计与实现相分离(降低代码耦合度、保证代码安全性)

实例

//TypeC接口
interface TypeC {
    final int MAX_VOLTAGE = 5; //常量
    void methodA();
    void methodB();
}
abstract class Phone {
    void charge(){
        System.out.println("charge");
    }

    void play(){
        System.out.println("play");
    }
}
//小米手机支持TypeC接口
class XiaoMi extends Phone implements TypeC {
    @Override
    public void methodA() {
        System.out.println("methodA");
    }

    @Override
    public void methodB() {
        System.out.println("methodB");
    }
}
//华为手机支持TypeC接口
class HuaWei extends Phone implements TypeC {
    @Override
    public void methodA() {
    }

    @Override
    public void methodB() {
    }
}

public class Client {
    public static void main(String[] args) {
        Phone phone = new XiaoMi();
        phone.charge();
        phone.play();

        XiaoMi xiaomi =new XiaoMi();
        xiaomi.methodA(); //不灵活

        TypeC typeC = new XiaoMi(); //隐藏了具体实现,提高了灵活性
        typeC.methodA(); //更加灵活

        typeC = new HuaWei();
        typeC.methodA();
        typeC.methodB();
    }
}
From:https://www.cnblogs.com/wmshun/p/18359982
本文地址: http://shuzixingkong.net/article/1108
0评论
提交 加载更多评论
其他文章 上周热点回顾(8.5-8.11)
热点随笔: · 感谢「河南图奕网络」赞助园子,成为第一家创始赞助商 (博客园团队)· 小厂也是厂,3000我也干 (Java3y)· C#.Net筑基-解密委托与事件 (安木夕)· 莽撞闯荡
LeetCode39. 组合总和
LeetCode39. 组合总和 题目叙述: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数
LeetCode39. 组合总和
PowerShell快速修改多个文件的名称
本文介绍基于PowerShell语言,对文件夹中全部文件的名称加以批量替换、修改的方法。 在之前的文章中,我们介绍了基于Python语言,批量修改大量文件的名称的方法。当时我们修改文件名的需求比较复杂,因此选择了用Python语言来实现;而在我们的需求重命名规则相对比较简单时,则可以基于PowerS
PowerShell快速修改多个文件的名称 PowerShell快速修改多个文件的名称 PowerShell快速修改多个文件的名称
SenseCraft 部署模型到Grove Vision AI V2图像处理模块
今天教大家快速上手Grove Vision AI V2 图像处理模块,我们将一起探讨如何利用 SenseCraft 部署 AI 模型,和如何通过XIAO ESP32C3调用这些模型,轻松实现智能视觉功能!
SenseCraft 部署模型到Grove Vision AI V2图像处理模块 SenseCraft 部署模型到Grove Vision AI V2图像处理模块 SenseCraft 部署模型到Grove Vision AI V2图像处理模块
Java 代码本地设置Hadoop用户名密码
本文简要介绍了Java 代码本地设置Hadoop用户名密码的两种方法,一种是使用Hadoop的API来设置用户名和密码,另外一种是使用Kerberos认证来连接Hadoop集群,第二种方法也是连接Hadoop集群的推荐方式。
数据裂变,数据库高可用架构设计实践
相关文章 数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版) 数据库系列:高并发下的数据字段变更 数据库系列:覆盖索引和规避回表 数据库系列:数据库高可用及无损扩容 数据库系列:使用高区分度索引列提升性能 数据库系列:前缀索引和索引长度的取舍 数据库系列:MyS
数据裂变,数据库高可用架构设计实践 数据裂变,数据库高可用架构设计实践 数据裂变,数据库高可用架构设计实践
《数据资产管理核心技术与应用》读书笔记-第四章:数据质量的技术实现(一)
《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与存储、数据血缘、数据质量、数据监控与告警、数据服务、数据权限
《数据资产管理核心技术与应用》读书笔记-第四章:数据质量的技术实现(一) 《数据资产管理核心技术与应用》读书笔记-第四章:数据质量的技术实现(一) 《数据资产管理核心技术与应用》读书笔记-第四章:数据质量的技术实现(一)
如何在实验室信息管理系统实现不定行,不定列检测?
前言 实验室信息管理系统,即 LIMS(Laboratory Information Management System),它是由计算机和应用软件组成,能够完成实验室数据和信息的收集、分析、报告和管理。早期的 LIMS 系统大多基于计算机局域网,专门针对一个实验室的整体环境而设计,是一个包括了信号采
如何在实验室信息管理系统实现不定行,不定列检测? 如何在实验室信息管理系统实现不定行,不定列检测? 如何在实验室信息管理系统实现不定行,不定列检测?