JAVA-抽象类和接口

news2024/9/20 18:30:37

文章目录


前言

大家好呀,今天给大家带来抽象类和接口的讲解,那么废话不多说,跟着我一起去学习吧!


1.1抽象类的概念

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果 一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

下面我们定义父类Animal和子类Dog,Cat来画图解释一下

 

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();
        
        dog.bark();// 狗叫
        cat.bark();// 猫叫
    }
}

abstract class Animal{
    /*
    * Animal是动物类,每个动物都有叫的方法。
    * 但由于Animal不是具体的动物,所以叫的方法无法具体实现
    * 那么我们该在方法中写什么好?
    * 写什么都是没用的,因为父类Animal的bark方法无法描述所有动物的叫!
    * 狗和猫的叫不同,狮子和大象等都不同
    * 那么既然无法实现,不如直接定义为抽象类!让子类重写抽象方法
    * 让子类自己去实现方法!
    * */
    public abstract void bark();
}

class Dog extends Animal{

    @Override
    public void bark() {
        System.out.println("狗叫");
    }
}

class Cat extends Animal{

    @Override
    public void bark() {
        System.out.println("猫叫");
    }
}

想象一个大人他有很多个子女,有一天他们家家宴

我们定义一个eat方法

大人们吃饭很快,吃完了,没出现在照片上,所以大人们的eat方法中应该写(吃得快)

大儿子是顺时针第三个,吃的很斯文,所以我们可以写(吃的斯文)

小儿子是顺时针第一个,吃得慢,所以可以写(吃得慢)

子女是大人们的孩子,我们让大人为父类,子女为子类,在这个场景中,父类的eat方法无法描述所有子类,所以子类需要重写eat,父类无法描述具体的对象(父亲是大人,母亲也是,叔叔....),直接可以定义为抽象类,宝子们,懂了没?


1. 2抽象类的语法

在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现(既不需要方法体)。

 抽象类也是类的一种,也是可以有普通成员变量和方法

1.3抽象类的特性

1.3.1抽象类不能直接实例化对象

抽象类无法描述具体的对象,实例化没有意义,所以java不允许实例化

这是语法,理解着去记,实例化出来也没用那为何要实例化呢?

这时候可能就有人说了,我如果就要实例化呢?

在这里我送你两句话

1.想写bug没人能拦你,

 

2.不过既然你问了这个问题,我还是会给出解决办法地,可以用匿名内部类(本质上其实就是重写了抽象方法)想要了解吗? 见下回分解

 

 


1.3.2抽象方法不能被private,final和static修饰

在这里你可能会疑问private是什么,那么.....

懂了吧!

private是访问修饰限定符,被修饰后抽象方法只能在本类中才有权限访问

举个例子吧,从前有个小孩叫张三,张三的爸爸叫李四,李四有一笔私房钱,那么请问,李四构不构成犯罪?

好吧扯远了,张三可以用李四的压岁钱吗?

我明确地告诉你,不可以,因为李四的money是私有的,只能李四自己用!


final修饰的方法表示最终的方法,不能重写


static为什么不能修饰抽象方法?

不知阁下可否知道static修饰的是东西属于类的(不知道的话可以去看static详解),在类加载的时候就被加载了

那么类的东西可以被继承吗?是不可以的

static修饰的东西是类的一部分,假如类是个

那么static修饰的东西可以是一面墙,一个地板,无法被继承 


1.3.3 抽象类的子类要么也是抽象类,要么重写所有抽象方法

怎么理解? 动物可以有子类陆生和水生,显然这两个子类都是抽象类

动物也可以是狗和猫,显然,这两个类都不是抽象类

我们以水生和狗来举例

 

1. 3.4 抽象类不一定含有抽象方法,但是含有抽象方法的内一定是抽象类(上图)

1.3.5 抽象类中可以有构造方法,供子类创建对象时,为父类初始化

 

1.4抽象类的作用


抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法. 有些同学可能会说了, 普通的类也可以被继承呀, 普通的方法也可以被重写呀, 为啥非得用抽象类和抽象方法 呢? 确实如此. 但是使用抽象类相当于多了一重编译器的校验. 使用抽象类的场景就如上面的代码, 实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类 了, 使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题. 很多语法存在的意义都是为了 "预防出错",充分利用编译器的校验, 在实际开发中是非常有意义的.


2.1 接口的概念


接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。 在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。


2.2 语法规则

接口的定义与类基本相同,将class换成interface即可

 

2.3 接口的使用

接口不能直接使用,必须要有一个实现类来实现接口,实现接口中所有的抽象方法

 2.4 接口的特性

1. 接口类型是一种引用类型,但是不能直接new接口的对象

2.. 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是 public abstract)

 

 3.接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量

 

2.5 接口的多实现和接口间的多继承

类可以实现多个接口

这里就不过多讲解了,很简单的,大家可以自己试试

除此之外,接口之间还可以多继承,即接口可以继承多个接口,大家了解即可

有兴趣的话,不妨自己试试

2.6 抽象类和接口的区别


抽象类和接口都是 Java 中多态的常见使用方式. 都需要重点掌握. 同时又要认清两者的区别(重要!!! 常见面试题).

核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中 不能包含普通方法, 子类必须重写所有的抽象方法.

 

 

总结


以上就是今天要讲的内容,本文重点介绍了抽象类简单介绍了接口,抽象类和接口中提供了大量能使我们快速便捷地处理数据的函数和方法,值得我们去重点掌握。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512311.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 11新特性:模块化系统和本地变量类型推断

作为Java语言的最新版本,Java 11带来了许多新特性,其中最引人注目的是模块化系统和本地变量类型推断。这两个新特性对Java开发人员来说具有重要意义,因此在本文中,我们将详细探讨这两个新特性及其对Java开发的影响。 章节1&#…

记录一次uniapp实现APP自动升级

描述 app的版本管理和升级,是一个不可或缺的功能,而uniapp则是提供了一整套的流程,由于官方文档过于复杂,而且写的云里雾里的,所以个人记录一次我的操作,直到配置成功。 总体 一共分为2个部分&#xff0…

scanf与printf函数的用法

前言: 学习c语言编程,必不可少的操作就是键盘输入与屏幕输出。今天我想讲讲自己对scanf与printf使用的看法 一、scanf与printf: 1.scanf()函数: int scanf ( const char * format, ... ); 函数的功能:从标准输入中…

契约锁亮相华为2023中国合作伙伴大会,共谱华为云软件生态新篇章

5月8日-9日,以“因聚而生 众志有为”为主题的“华为中国合作伙伴大会2023”在深圳举行。契约锁作为华为云优秀软件伙伴,受邀参会并在“聚数字化先行者,谱软件生态新乐章”分论坛开展“让数字可信,打通数字化最后一公里”数字化实践…

Google Play 政策更新重点回顾 (下) | 2023 年 4 月

Google Play 和您一样,始终坚持为用户提供更优质的产品、更流畅的体验。为持续打造值得信赖的优质应用平台,我们也在不断进行政策更新。在上一篇文章中与您回顾了 2023 年 4 月 Google Play 政策的更新要点,这篇文章我们将为您带来重点政策解…

golang汇编之常量和全局变量(三)

常量 Go汇编语言中常量以$美元符号为前缀。常量的类型有整数常量、浮点数常量、字符常量和字符串常量等几种类型。以下是几种类型常量的例子: $1 // 十进制 $0xf4f8fcff // 十六进制 $1.5 // 浮点数 $a // 字符 $"abcd" …

【加解密篇】Passware Kit Forensic暴力美学-已知部分密码自定义解密详细参数设置

【加解密篇】Passware Kit Forensic暴力美学-已知部分密码自定义解密详细参数设置 都说"自制武器不一定是最强的,但最强的武器一定是自制的",对于取证工具也是一样,虽然默认配置足够强,但如果我们能根据实时情景自定义…

arduino 导入 Brain 库

一、引言 最近在做一个可以用脑电波控制的arduino小车,需要用到Brain这个库,而且需要自己导入才能使用。之前试了很多方法,导入成功了,过了几个月又忘记怎么导入了,今天想起来记录一下,好记性不如烂笔头。 …

LNK2019 无法解析的外部符号,一种新的思路

LNK2019 无法解析的外部符号,一种新的思路 一般来说,这种问题的原因有如下几点: 函数只有声明没有实现如果是其它库的函数,可能没有链接lib文件如果函数是封装在dll中的,可能没有导出如果是模板函数或模板类&#xf…

初始MyBatis,w字带你解MyBatis

一.什么是mybatis mybatis的概念 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。1、Mybatis是一个半ORM(对象关系映射)框架,底层封装了JDBC,是程序员在开发时只需要关注SQL语句本身&#…

U-boot顶层Makefile文件分析(一)

在阅读 uboot 源码之前,肯定是要先看一下顶层 Makefile,分析 gcc 版本代码的时候一定是先从顶层 Makefile 开始的,然后再是子 Makefile,这样通过层层分析 Makefile 即可了解整个工程的组织结构。顶层 Makefile 也就是 uboot 根目录…

界面控件DevExpress WPF MessageBox组件,进一步增强用户体验!

在DevExpress WPF v22.2版本中,官方引入了一系列功能来帮助改进一个常见WPF UI元素——MessageBox的用户体验,新的MessageBox相关选项包括: 文本选择支持自定义图像支持带有计时器的按钮,可以自动关闭窗口 ThemedMessageBox类允…

OJ练习第103题——最大矩形

最大矩形 力扣链接:85. 最大矩形 题目描述 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例 输入:matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”…

数据库管理-第七十四期 我的Oracle ACE之路(20230511)

数据库管理 2023-05-11 第七十四期 我的Oracle ACE之路1 差点错过2 ACE Associate3 一路走来总结 第七十四期 我的Oracle ACE之路 “终于等到你,还好我没放弃”。经过了整整4个月20天的等待,我终于收到了Oracle ACE Associate的确认邮件,成为…

『python爬虫』17. 线程池和进程池以及线程池实战(保姆级图文)

目录 1. 线程池和进程池解决的是调度问题2. 线程池3. 线程池实战:爬取西游记的标题总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 1. 线程池和进程池解决的是调度问题 ⽹站的数据太多了&#xff0…

典型随机噪声激励

1.按噪声的起源分类 根据噪声的起源,分为内部噪声和外部噪声。 内部噪声:来源于系统内部的涨落运动或被检测信号,如布朗粒子受到周围液体分子的无规则碰撞即为内部噪声; 外部噪声:来自系统所处外部环境的随机涨落&…

endNote X9 导入英文文献(谷歌学术、web of science 等)

文章目录 1 导入英文文献(谷歌学术、web of science 等)2 EndNote X9 插入参考文献常见问题总结3 EndNote X9 快速上手教程(毕业论文参考文献管理器) 1 导入英文文献(谷歌学术、web of science 等) 谷歌学术…

Vite如何实现秒级依赖预构建的能力

大家都知道, Vite是一个提倡 no-bundle 的构建工具,相比于传统的 Webpack,能做到开发时的模块按需编译,而不用先打包完再加载。这一点我们在快速上手这一节已经具体地分析过了。 需要注意的是,我们所说的模块代码其实分为两部分,一部分是源代码,也就是业务代码,另一部…

线性代数——特征值与特征向量的性质

(1)设A为方阵,则A与 A T A^{T} AT有相同的特征值。 此处用到了两个关键性质,一:单位阵的转置为其本身,二:转置并不改变行列式的值。 (2): 设n阶方阵A( a i j…

汽车电子的电磁兼容性分析

随着电子技术的不断发展,新技术越来越多的应用到汽车领域,因此各个电子装置和电子控制系统必须相互适应,这就是电磁兼容性(EMC)要求。为了保证汽车可靠性,设计师必须在早期设计阶段分析电磁兼容性问题。目前市场上推出了一些电磁兼…