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 相关文章推荐
深入理解以DEBUG方式线程的底层运行原理
Jun 21 Java/Android
springBoot基于webSocket实现扫码登录
Jun 22 Java/Android
Springboot集成阿里云OSS上传文件系统教程
Jun 28 Java/Android
Java SSH 秘钥连接mysql数据库的方法
Jun 28 Java/Android
解决ObjectMapper.convertValue() 遇到的一些问题
Jun 30 Java/Android
mybatis 解决从列名到属性名的自动映射失败问题
Jun 30 Java/Android
JAVA API 实用类 String详解
Oct 05 Java/Android
Netty客户端接入流程NioSocketChannel创建解析
Mar 25 Java/Android
Android自定义scrollview实现回弹效果
Apr 01 Java/Android
mybatis 获取更新记录的id
May 20 Java/Android
Java实现简单小画板
Jun 10 Java/Android
ConditionalOnProperty配置swagger不生效问题及解决
Jun 14 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
php Ajax乱码
2008/04/09 PHP
php缓存技术详细总结
2013/08/07 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中logging模块的用法实例
2014/09/29 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
Django接收自定义http header过程详解
2019/08/23 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
美国男女折扣服饰百货连锁店:Stein Mart
2017/05/02 全球购物
巴黎一票通:The Paris Pass
2018/02/10 全球购物
初三政治教学反思
2014/01/30 职场文书
高一新生军训感言
2014/03/02 职场文书
致共产党员倡议书
2014/04/16 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
525心理活动总结
2014/07/04 职场文书
解除合同协议书范本
2016/03/21 职场文书
公开致歉信
2019/06/24 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
MySQL 数据 data 基本操作
2022/05/04 MySQL