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常用的加密算法
Jun 11 Java/Android
Java Optional<Foo>转换成List<Bar>的实例方法
Jun 20 Java/Android
详解Java实现设计模式之责任链模式
Jun 23 Java/Android
使用feign服务调用添加Header参数
Jun 23 Java/Android
springboot集成flyway自动创表的详细配置
Jun 26 Java/Android
Java中常用解析工具jackson及fastjson的使用
Jun 28 Java/Android
浅谈Java父子类加载顺序
Aug 04 Java/Android
Java中CyclicBarrier和CountDownLatch的用法与区别
Aug 23 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
Android存储中最基本的文件存储方式
Apr 30 Java/Android
Spring IOC容器Bean的作用域及生命周期实例
May 30 Java/Android
Android Canvas绘制文字横纵向对齐
Jun 05 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
php4的彩蛋
2006/10/09 PHP
PHPEXCEL 使用小记
2013/01/06 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
jsTree使用记录实例
2016/12/01 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
2020/04/09 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
python决策树之C4.5算法详解
2017/12/20 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
python global和nonlocal用法解析
2020/02/03 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
Python实现EM算法实例代码
2020/10/04 Python
海淘母婴商城:国际妈咪
2016/07/23 全球购物
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
社会实践评语
2014/04/28 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
迟到检讨书
2015/01/26 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python