Java基础六(抽象类与接口)

Java抽象类与接口详解 什么是抽象类,什么是接口,其用法,通过本文,尽收眼底。 阅读详情

Java基础六(抽象类与接口)

1.抽象类:

抽象类和抽象方法都使用 abstract 关键字进行声明。如果一个类中包含抽象方法,那么这个类必须声明为抽象类。

抽象类和普通类最大的区别是,抽象类不能被实例化,只能被继承。

public abstract class AbstractClassExample {

    protected int x;
    private int y;

    public abstract void func1();

    public void func2() {
        System.out.println("func2");
    }
}
public class AbstractExtendClassExample extends AbstractClassExample {
    @Override
    public void func1() {
        System.out.println("func1");
    }
}
// AbstractClassExample ac1 = new AbstractClassExample(); // 'AbstractClassExample' is abstract; cannot be instantiated
AbstractClassExample ac2 = new AbstractExtendClassExample();
ac2.func1();

2. 接口

接口是抽象类的延伸,在 Java 8 之前,它可以看成是一个完全抽象的类,也就是说它不能有任何的方法实现。

从 Java 8 开始,接口也可以拥有默认的方法实现,这是因为不支持默认方法的接口的维护成本太高了。在 Java 8 之前,如果一个接口想要添加新的方法,那么要修改所有实现了该接口的类,让它们都实现新增的方法。

接口的成员(字段 + 方法)默认都是 public 的,并且不允许定义为 private 或者 protected。从 Java 9 开始,允许将方法定义为 private,这样就能定义某些复用的代码又不会把方法暴露出去。

接口的字段默认都是 static 和 final 的。

public interface InterfaceExample {

    void func1();

    default void func2(){
        System.out.println("func2");
    }

    int x = 123;
    // int y;               // Variable 'y' might not have been initialized
    public int z = 0;       // Modifier 'public' is redundant for interface fields
    // private int k = 0;   // Modifier 'private' not allowed here
    // protected int l = 0; // Modifier 'protected' not allowed here
    // private void fun3(); // Modifier 'private' not allowed here
}
public class InterfaceImplementExample implements InterfaceExample {
    @Override
    public void func1() {
        System.out.println("func1");
    }
}
// InterfaceExample ie1 = new InterfaceExample(); // 'InterfaceExample' is abstract; cannot be instantiated
InterfaceExample ie2 = new InterfaceImplementExample();
ie2.func1();
System.out.println(InterfaceExample.x);

3. 比较

从设计层面上看:

抽象类: 提供了一种 IS-A 关系,需要满足里式替换原则,即子类对象必须能够替换掉所有父类对象。

接口: 更像是一种 LIKE-A 关系,它只是提供一种方法实现契约,并不要求接口和实现接口的类具有 IS-A 关系。

从使用上来看, 一个类可以实现多个接口,但是不能继承多个抽象类。
接口的字段只能是 static 和 final 类型的,而抽象类的字段没有这种限制。
接口的成员只能是 public 的,而抽象类的成员可以有多种访问权限。

4. 使用选择

使用接口:

  • 需要让不相关的类都实现一个方法,例如不相关的类都可以实现, Comparable 接口中的 compareTo() 方法;
  • 需要使用多重继承。

使用抽象类:

  • 需要在几个相关的类中共享代码。
  • 需要能控制继承来的成员的访问权限,而不是都为 public。
  • 需要继承非静态和非常量字段。

在很多情况下,接口优先于抽象类。因为接口没有抽象类严格的类层次结构要求,可以灵活地为一个类添加行为。并且从 Java 8 开始,接口也可以有默认的方法实现,使得修改接口的成本也变的很低。

super:

访问父类的构造函数:可以使用 super() 函数访问父类的构造函数,从而委托父类完成一些初始化的工作。

应该注意到,子类一定会调用父类的构造函数来完成初始化工作,一般是调用父类的默认构造函数,如果子类需要调用父类其它构造函数,那么就可以使用 super() 函数。

访问父类的成员:如果子类重写了父类的某个方法,可以通过使用 super 关键字来引用父类的方法实现。

public class SuperExample {

    protected int x;
    protected int y;

    public SuperExample(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public void func() {
        System.out.println("SuperExample.func()");
    }
}
public class SuperExtendExample extends SuperExample {

    private int z;

    public SuperExtendExample(int x, int y, int z) {
        super(x, y);
        this.z = z;
    }

    @Override
    public void func() {
        super.func();
        System.out.println("SuperExtendExample.func()");
    }
}
SuperExample e = new SuperExtendExample(1, 2, 3);
e.func();
SuperExample.func()
SuperExtendExample.func()

特别参考及感谢:
https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20%E5%9F%BA%E7%A1%80.md

MATLAB机械臂轨迹规划:在关节空间中生成多项式轨迹以及 jtraj函数(内容超详细讲解) matlab机器人仿真,关节空间多项式轨迹生成 阅读详情

相关推荐

STM32F407+LAN8720A+LwIP实战:FreeModbus TCP从机功能开发指南

本文详细介绍了基于STM32F407和LAN8720A硬件平台,结合LwIP协议栈实现FreeModbus TCP从机功能的开发指南。内容涵盖硬件连接、LwIP移植、FreeModbus TCP从机实现、任务调度及调试技巧,为工业控制领域的以太网通信开发提供实用参考。

weixin_29190651的博客 546

面试复习之—Java基础(六):抽象类与接口

最近在准备面试,把知识点复习一遍,整理出的笔记记录下,里面会穿插代码和面试例题。 内容不是原创,是总结和收集,如果侵权了请联系作者,若有错误也请各位指正。因为收集的时候忘记把来源记录下来了,所以就不po出处了,请见谅(这是个坏习惯,一定改)。 面试复习之—Java基础(六):抽象类与接口抽象类抽象类特征接口接口特性抽象类和接口的区别 这是面试复习内容的第六篇——抽象类与接口,主要是Java基础的内容,所有内容将分为几篇来写。 抽象类 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和

尼尧Nier的博客 305

SAP FICO 银企直连

银企直联或者自动付款的目的是和银行做一个接口,把SAP中的到期应付款(也包括预付款)按照一定格式(银行要求的)在审批后发送给银行,请银行按照这个付款指定进行付款,并跟踪付款状态的过程,这个过程在SAP中如何实现呢?根据个人项目经验,客户需求可分为如下三种: 1. 第一种是完全不自动方式,仅批量生成付款凭证,实际的付款还是通过原来的流程执行,和银行没有任何接口; 2. 第二种是半自动方式,这种方式下需要按照银行的要求的格式生成付款条件,然后把付款文件下载下来,通过企业版的网银接口把付款文件进行上载,提交后

IamRunjiang的博客 9287

Java基础(六)--抽象类和接口

抽象类 ·普通类是一个完善的功能类,可以产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。 ·抽象类是指在普通类的结构中增加抽象方法的组成部分。 抽象方法 ·抽象方法指没有方法体({})的方法,同时抽象方法还必须使用关键字abstract做修饰 ·拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明 ex abstract class A{ public void fun(){//普通方法有方法体 System.out.println("存在

baidu_41191295的博客 209

多标签损失之Hamming Loss(PyTorch和sklearn)、Focal Loss、交叉熵和ASL损失

多标签损失

wuli_xin的博客 4461

工程师必看:如何用功率谱密度搞定随机振动测试(附Grms计算实例)

本文为工程师详解如何通过功率谱密度(PSD)曲线计算Grms(总均方根加速度),从而量化随机振动测试的强度。文章拆解了平直谱、斜谱的计算公式,提供了完整的Grms计算实例,并指出了单位换算、对数坐标等常见工程陷阱,帮助工程师精准完成测试准备与设备推力评估。

3c4x5z6v7b的博客 625

Java基础(六)——接口和抽象类

接口和抽象类很像,那么他们有什么异同呢,这就是这篇博文要讨论的。      一、相同点      1.接口和抽象类都不能被实例化,他们都位于继承树的顶端,用于被其他类实现和继承。      2.接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。      二、不同点      接口和抽象类的差别也很大:      

周江霄 722

当LightGBM推理遇上GPU:3种替代方案性能对比(含ONNX实战代码)

本文针对LightGBM官方不支持GPU推理的性能瓶颈,深度评测了RAPIDS cuML、ONNX Runtime GPU和Triton Inference Server三种GPU加速推理替代方案。通过详尽的性能对比和实战代码,为高并发、低延迟的在线预测场景提供了清晰的选型指南,帮助工程师打破推理性能枷锁,实现显著的吞吐量提升。

salt9的博客 813

Java基础(⑥接口和抽象类)

1.如果一个类之中只是由抽象方法和全局常量所组成的,那么在这种情况下不会将其定义为一个抽象类,而只会将其定义为接口,所以所谓的接口严格来讲就属于一个特殊的类,而且这个类里面只有抽象方法与全局常量。 · 接口必须要有子类,但是此时一个子类可以使用implements关键字实现多个接口; · 接口的子类(如果不是抽象类),必须要覆写接口中的全部抽象方法; · 接口的对象可以利用子类对象的向上转型进行实例化操作。 2.要定义一个接口使用interface关键字完成。 3.抽象类 针对的是类 接口 ..

weixin_54255580的博客 113

自适应IIR格型滤波器的Matlab实现

概述 在现有的众多抑制窄带干扰的信号处理手段中,时域自适应陷波干扰抑制技术具有实现简单、抗干扰性能好等优点。IIR陷波器按照结构可以分为直接型和格型两种。相比自适应直接型IIR陷波器,自适应格型IIR陷波器不仅可以准确地控制滤波器的陷波频率,也可以准确地调整陷波器的带宽。 传递函数 二阶自适应IIR格型陷波器的传递函数H(z)为: 其中α与陷波带宽有关,β与陷波频率有关;对应的结构如下图所示: Matlab算法实现 ...

剑藏锋的博客 2799

论deepseek软件底层原理

如处理医学文本时,将任务分配给擅长医学知识处理的专家,避免通用模块处理的低效性,极大提升计算效率与任务处理的针对性。教师模型复杂且强大,学生模型结构简单。协作处理:多模块协作时,建立数据流通与交互机制,各模块按顺序或并行处理数据,不断传递与更新中间结果,共同完成复杂任务。(一)输入处理与任务判断 输入预处理:接收输入数据,如用户文本提问,首先进行清洗,去除噪声数据、特殊字符等。任务分类:通过MoE架构“路由器”,依据输入数据特征,判断任务所属领域与类型,如文本分类、情感分析等,为后续处理模块选择提供依据。

欢乐打代码! 2738

Java学习日记基础篇(六)—— 抽象类、接口、final

抽象类 为什么要有抽象类?   因为父类方法有不确定性,我们在Animal中定义了一个方法,但是它会被子类的方法覆盖掉,我们就不知道这个方法原本是做什么的 1 public class test1 2 { 3 public static void main(String[] args) { 4 } 5 } 6 7 class A...

diaoleishu6642的博客 260

Xilinx系ZYNQ学习笔记(一)Vivado使用说明

vivado使用学习

贾saisai的博客 1873

Java--基础(六)抽象类和接口

抽象类: abstract抽象:不具体,看不明白。抽象类表象体现。 在不断抽取过程中,将共性内容中的方法声明抽取,但是方法不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abstract所标示,声明为抽象方法。 抽象方法所在类一定要标示为抽象类,也就是说该类需要被abstract关键字所修饰。 抽象类的特点: 抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键

似水流年 466

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

JAVA编程基础(六)——抽象类、密封类和接口

一、抽象类 (一)抽象类:包含抽象方法的类称为抽象类。 抽象类也要被abstract修饰,抽象类中可以有非抽象方法,抽象类不能创建实例对象。 abstract class Animal { public abstract void bark();//抽象方法 public void fun(){ System.out.println("abstract...

初叙 466

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java基础(六)——面向对象_继承、抽象类、接口

继承是面向对象三大特征之一,也是实现软件复用的重要手段。Java的继承具有单继承的特点,每个子类只有一个直接父类。 1, 继承的特点: Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类,有时称其为基类、超类。父类和子类的关系,是一种一般和特殊的关系。例如水果和苹果的关系,苹果继承了水果,苹果是水果的子类,则苹果是一种特殊的水果

Gamelack的专栏 556

java基础(六)抽象类(abstract class)和接口(Interface)

抽象类(abstract class)和接口(Interface)是Java语言中对于抽象类定义进行支持的两种机制,赋予了Java强大的面向对象能力。 二者具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstractclass和Interface的选择显得比较随意。其实,两者之间还是有区别的。 抽象类(abstract class) 作用:abstractclass是为...

xihuanyuye的博客 404

Java基础篇:抽象类与接口

(1)抽象类和接口都用于抽象化具体对象的,都不能直接实例化,但是两者的侧重点不同:抽象类主要用来抽象类型,表示这个对象是什么;接口主要用来抽象功能,表示这个对象能做什么; (2)接口可以看成抽象类的变体,所有方法都是抽象的,因此接口只能做方法的声明,不能有方法的实现;而抽象类可以有默认的方法实现,既可以做方法的声明,也可以做方法的实现;

张维鹏的博客 1万+

JAVA基础之抽象类和接口含义与异同点

本文主要讲述了抽象类和接口的具体实现,以及一些注意点。还有抽象类和接口的相同点和不同点

m0_62729850的博客 2560

Java基础之抽象类与接口

在工作中我们并不会经常用到抽象类,或者即使使用到了也只是在遵从整个项目的架构而在生成接口。例如我们经常看到许多公司的项目中大量service实际上没有多种实现,却将Service分为了service抽象类和implement实现类两个文件。这是一件需要权衡利弊的问题,而不是应该遵从大流。 先一起来看一下这些抽象的方法与类的使用吧 抽象类 作用:如果父类的方法本身不需要实现任何功能,仅仅是为了定义方...

学习即修行 6万+

Java之抽象类与接口

接口 && 抽象类

weixin_56252440的博客 5774

java基础——抽象类与接口

抽象类是一种不能被实例化的类,它为子类提供了一个通用的模板。抽象类可以包含抽象方法和具体方法。抽象方法是没有方法体的方法,它只定义了方法的签名,具体的实现需要由子类来完成。在 Java 中,使用abstract关键字来定义抽象类和抽象方法。接口是一种完全抽象的类型,只包含抽象方法和常量。在 Java 8 及以后的版本中,接口还可以包含默认方法和静态方法。默认方法提供了接口方法的默认实现,子类可以选择是否重写;静态方法则可以直接通过接口名调用。使用interface关键字来定义接口。重写。

2403_87486006的博客 833

【基础】Java抽象类与接口的区别与使用场合

抽象类与接口的区别 最重要的区别是,接口的方法不可以有实现,并且是绝对的抽象方法。抽象类可以有实例方法用来实现默认行为。 接口中的变量申明默认是final, 而抽象类中变量申明可以是非final。 接口中的成员默认是public修饰,而抽象类中成员可以是private, protected等等。 接口通过关键字implements被其他类实现,而抽象类则是通过extends关键字被其他类扩展. ...

树洞 8189

java基础之接口与抽象类的区别

java基础之接口与抽象类的区别         抽象类,包含一个抽象方法的类就是抽象类。什么是抽象方法呢?声明而未被实现的方法,抽象方法必须用abstract关键字,抽象类不能直接实例化,都是通过它的子类,即继承抽象类的类来实例化的,而且子类必须重写抽象类中的所有抽象方法。         接口,接口的关键字是interface,接口中的成员变量必须是静态的,而且必须是被初始化的,接口中的方

程序员成长指北 2904

【Java】抽象类和接口

本博客结合具体代码,带大家认识Java当中的抽象类和接口。

2401_88030885的博客 1327

【JAVA SE基础】抽象类和接口

抽象类和接口作为核心概念,发挥着不可或缺的作用,在本篇博客中,我们将探讨抽象类和接口的定义、特点及其实际应用。

2302_76707004的博客 1327
上一篇: Java基础五(继承)
下一篇: Java基础七(重写与重载)
想飞的盗版鱼
博客等级 码龄10年 56粉丝 243原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值