Java由浅入深通关抽象类与接口(上篇)


Posted in Java/Android onApril 26, 2022

1.抽象类

1.1抽象类概念

我们都知道对象是通过类来进行描述的,但是不是说所有的类都是用来描述对象的

一个类的类中没有足够的信息来描述一个具体的对象,这便是抽象类

抽象类的关键字:abstract

1.2抽象方法

首先还是看看之前写过的类:

class Plant {
    String name;
    String source;
    String genus;
    public void trait() {
        System.out.println("父类方法");
    }
}
class Tree extends Plant {
    @Override
    public void trait() {
        System.out.println("子类方法");
    }
}

既然trait方法是重写的方法,那么父类的trait根本就没有实现的必要,所以我们可以将其改成抽象方法

注意:抽象类可以没有抽象方法,但抽象方法必须在抽象类里面

abstract class Plant {
    String name;
    String source;
    String genus;
    public abstract void trait();
}
class Tree extends Plant {
    @Override
    public void trait() {
        System.out.println("子类方法");
    }
}

Java由浅入深通关抽象类与接口(上篇)

 1.3抽象类的细节

1.抽象类是用于被继承的,所以无法实例化,除这点外它和普通的类没有区别

2.抽象类里面可以没有抽象方法,但抽象方法一定要在抽象类中

3.一个普通类继承抽象类,要重写抽象类里面所有的抽象方法

4.抽象类可以继承抽象类,此时不需要重写抽象方法

5.final无法修饰抽象类和抽象方法

6.抽象方法不能使用private和static修饰

可能会有人觉得奇怪:普通类也可以作为父类被继承,为什么还要再弄一个抽象类出来?

我们不妨假设一个场景:你在实例化对象的时候实例化了父类对象,如下:

public static void main(String[] args) {
        Plant tree=new Plant();
        tree.trait();
    }

如果父类是普通类的话,此时编译器不会报错,直接调用父类的方法

如果父类是抽象类,因为抽象类无法被实例化,所以编译器会直接报错,这样问题就能更早被发现

2.接口

2.1接口概念

所谓接口就是公共的行为规范准则,比如说A4纸,A4纸的大小是210mm*297mm,那么你就只能按照这个规格来进行生产

在Java中接口就可以看成是多个类的公共规范,是一种引用类型数据

接口关键字:interface

2.2接口的细节

接口同样有一些需要注意的事项:

1.接口也是用来被其它类实现的,同样不能实例化

2.接口里面的方法只能是抽象方法,默认是public static修饰

3.接口的成员变量默认是静态常量,所以必须初始化

4.接口被实现所使用的关键字为implements,类实现接口依旧要重写接口中所有的抽象方法

5.接口不能有构造方法和静态代码块

6.接口继承接口使用extends

7.创建接口时,接口的命名一般以大写的字母“I”开头(建议,非硬性要求)

8.接口也可以实现多态

接口在Java中最主要的作用就是实现多继承

Java中一个类只能继承一个父类,但它可以实现多个接口

抽象类和接口有相似的地方,不过二者之间最本质的区别就是抽象类可以有普通成员方法和普通成员变量,而接口中的方法只能是抽象方法

抽象类和接口介绍完毕,下一篇会介绍Java中一些比较重要的接口

到此这篇关于Java由浅入深通关抽象类与接口上的文章就介绍到这了!

Java/Android 相关文章推荐
教你用Java Swing实现自助取款机系统
Jun 11 Java/Android
SpringCloud Alibaba 基本开发框架搭建过程
Jun 13 Java/Android
Java基础之this关键字的使用
Jun 30 Java/Android
详细了解java监听器和过滤器
Jul 09 Java/Android
Log4j.properties配置及其使用
Aug 02 Java/Android
Java比较两个对象中全部属性值是否相等的方法
Aug 07 Java/Android
Java基于Dijkstra算法实现校园导游程序
Mar 17 Java/Android
SpringBoot2零基础到精通之异常处理与web原生组件注入
Mar 22 Java/Android
Java 超详细讲解数据结构中的堆的应用
Apr 02 Java/Android
Java 常见的限流算法详细分析并实现
Apr 07 Java/Android
Java由浅入深通关抽象类与接口(上篇)
Apr 26 Java/Android
利用Java连接Hadoop进行编程
Jun 28 Java/Android
Mybatis-Plus 使用 @TableField 自动填充日期
Apr 26 #Java/Android
Java 写一个简单的图书管理系统
Apr 26 #Java/Android
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
Apr 24 #Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
Apr 24 #Java/Android
Android在Sqlite3中的应用及多线程使用数据库的建议
Apr 24 #Java/Android
Android开发 使用文件储存的方式保存QQ密码
Apr 24 #Java/Android
IDEA 2022 Translation 未知错误 翻译文档失败
You might like
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
PHP 面向对象详解
2012/09/13 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
JavaScript入门学习书籍推荐
2008/06/12 Javascript
javascript 变量作用域 代码分析
2009/06/26 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
python 追踪except信息方式
2020/04/25 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
学生干部学习的自我评价
2014/02/18 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL