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 相关文章推荐
SpringCloud Alibaba 基本开发框架搭建过程
Jun 13 Java/Android
Java基础之详解HashSet的使用方法
Jun 30 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
Springboot如何同时装配两个相同类型数据库
Nov 17 Java/Android
深入浅出讲解Java8函数式编程
Jan 18 Java/Android
SpringBoot整合Minio文件存储
Apr 03 Java/Android
Java字符缓冲流BufferedWriter
Apr 09 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
Android Canvas绘制文字横纵向对齐
Jun 05 Java/Android
Android中View.post和Handler.post的关系
Jun 05 Java/Android
Java实现带图形界面的聊天程序
Jun 10 Java/Android
Spring JPA 增加字段执行异常问题及解决
Jun 10 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高效率写法(详解原因)
2013/06/20 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
document.execCommand()的用法小结
2014/01/08 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
对于Python的框架中一些会话程序的管理
2015/04/20 Python
python函数装饰器用法实例详解
2015/06/04 Python
python检测服务器端口代码实例
2019/08/31 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
Python实现验证码识别
2020/06/15 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
Android面试宝典
2013/08/06 面试题
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/01/13 面试题
物流管理应届生求职信
2013/11/07 职场文书
童装店创业计划书
2014/01/09 职场文书
留学推荐信范文
2014/05/10 职场文书
亲属关系公证书样本
2015/01/23 职场文书
工会文体活动总结
2015/05/07 职场文书
升学宴祝酒词
2015/08/11 职场文书
执行力心得体会范文
2016/01/11 职场文书
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android