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项目实战之nacos-server服务搭建过程
Jun 21 Java/Android
利用Java设置Word文本框中的文字旋转方向的实现方法
Jun 28 Java/Android
spring boot项目application.properties文件存放及使用介绍
Jun 30 Java/Android
SpringBoot+VUE实现数据表格的实战
Aug 02 Java/Android
聊聊SpringBoot自动装配的魔力
Nov 17 Java/Android
maven依赖的version声明控制方式
Jan 18 Java/Android
Java基础——Map集合
Apr 01 Java/Android
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Apr 07 Java/Android
Springboot-cli 开发脚手架,权限认证,附demo演示
Apr 28 Java/Android
Java对文件的读写操作方法
Apr 29 Java/Android
Android Studio 计算器开发
May 20 Java/Android
Java实现注册登录跳转
Jun 16 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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
JS去除空格和换行的正则表达式(推荐)
2016/06/14 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
详解js中Array的方法及技巧
2018/09/12 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
python简单的函数定义和用法实例
2015/05/07 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
python实现双色球随机选号
2020/01/01 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
如何才能写好调研报告?
2019/07/03 职场文书
Python Django模型详解
2021/10/05 Python