第十八节:详解Java抽象类和接口的区别
前言
对于面向对象编程来说,抽象是它的特征之一。
在Java中,实现抽象的机制分两种,一为抽象类
,二为接口
。
抽象类为abstract class
,接口为Interface
。
今天来学习一下Java中的抽象类和接口。
目录
- 什么是抽象
- 什么是抽象类
- 什么是接口
- 区别
- 代码例子
- 结语
什么是抽象
从具体事物抽出,概括它们共同的方面,本质属性与关系等,称为抽象。看不见,摸不着的东西叫做抽象,抽象是人们对世界万物的感觉,用特定的图像表达出来,要理解抽象的东西,就必需从内心感受它们。
举例,红色这个词语本身,在没有建立存在色彩这种概念以前,就是一个很抽象的东西。抽象说直白点就是把现实生活中复杂的问题抽象成一个简单的问题。举个例子,如人这个现实中的东西,抽象下就是person
这个对象,对象有名字即类名,接着有属性即年龄,性别,身高等。对于对象中的方法即是人要吃饭,睡觉等。
什么是抽象类
抽象类的定义和使用格式
abstract class 类名{
类体
}
class 类名 extends 抽象类 {
//实现全部抽象方法
}
抽象类是类对象的抽象集合
,抽象类使用abstract
关键字修饰,abstract
不能与final
并列修饰同一个类,在抽象类中具体抽象的是属性和行为,在抽象类中,含有抽象方法的类为抽象类,一定是抽象类,但抽象类中不一定含有抽象方法。
抽象类不能被实例化,如果要实例化,需通过子类继承抽象类,然后子类必须重写父类的所有抽象方法。抽象方法在抽象类,仅此声明,方法的具体实现在子类中进行。抽象类只有被继承才有用武之地。
//抽象类
public abstract class Person {
public abstract void run();
}
//子类继承抽象类
public class Studentone extends Person{
@Override
public void run(){
System.out.println("人会跑");
}
}
//测试
public class Test {
public static void main(String[] args){
Person person = new Student();
person.run();
}
}
//结果
人会跑
什么是接口
接口的定义和使用格式
interface 接口名 {
[public] [static] [final] 变量;
[public] [abstract] 方法;
}
class 类名 implement 接口列表 {
//实现所有接口中声明的方法
}
接口是类行为方法的抽象集合
,类行为方法,是对方法进行抽象,接口不是一个类,对于抽象类,它是对对象的抽象集合
,对象即包含对属性和方法,接口是比抽象类更加抽象的一种。
Java
中的接口是为了降低功能模块间的耦合,子接口中所有方法都是抽象的,都是公有的。接口中的属性是全局常理即为public static final
的,方法即public static
的。关键字implements
实现接口,Java
中不能继承多个抽象类,但能实现多个接口,记住接口只能继承接口。
interface Demo{
void sleep();
void play();
}
class Test implements Demo{
void sleep();
void play();
}
类必须实现接口中所有的方法,但抽象类可以不用实现接口中的所有方法。
区别
抽象类和接口语法层次
public abstract class Demo {
abstract void method1();
void method2(){
}
}
interface Demo {
void method1();
void method2();
}
可以看出接口是抽象类的特殊化。
抽象类和接口设计层次
- 抽象类是
对类抽象
,而接口是对行为的抽象
。 - 抽象类为
继承关系
,接口为实现类与接口之间的契约关系
。 - 抽象类为单继承,接口为多“继承”。子类只能继承一个抽象类,但可实现多个接口。
代码
//抽象类
abstract class Person {
abstract void run();
abstract void jump();
}
//接口
interface School{
void go();
}
//实现
class Student extends Person implements School{
void run();
void jump();
void go();
}
抽象类中成员变量默认为friendly,函数修饰符
public
,protected
,default
。
接口属性为静态,public static final
,成员函数为public
。
结语
- 详解
Java
抽象类和接口的区别
小礼物走一走 or 点赞
第十八节:详解Java抽象类和接口的区别的更多相关文章
- java抽象类与接口的区别及用法
java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...
- Java抽象类和接口的区别(好长时间没看这种文章了)
Java抽象类和接口的区别(好长时间没看这种文章了) abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的 ...
- java 抽象类与接口的区别 整理
抽象类与接口的区别 抽象类 包含抽象方法的类就是抽象类,声明的语句:abstract class 必须是public protected 接口 对行为的抽象,声明语句:interface 抽象方法的修 ...
- java抽象类和接口的区别(转载)
1.Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用. 如果向一个抽象类里加入 ...
- Java抽象类和接口的区别及联系
抽象类 注:先将抽象类中的两种方法解释完,再综合解释抽象类 抽象方法 应用场景:其下所有子类都应该有该方法但是大部分子类具体的执行步骤是有所不同的. 必须重写:也可以说"必须实现" ...
- java 抽象类与接口的区别
在Java 语言中, abstract class 和interface 是支持抽象类 定义的两种机制.正是由于这两种机制的存在,才赋予 了Java强大的 面向对象能力.abstract class和 ...
- Java抽象类与接口的区别
很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. ...
- XML文档形式&JAVA抽象类和接口的区别&拦截器过滤器区别
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? a: 两种形式 dtd schemab: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发 ...
- 【转】Java抽象类与接口的区别
很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. ...
随机推荐
- 卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)
分享一些公式计算张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算. 以AlexNet网络为例,以下是该网络的参数结构图. AlexNet网络的层结构如下: 1.Input: 图 ...
- JUC详解
一.Java多线程 -- JUC包源码分析1 -- CAS/乐观锁 乐观锁其实就是不加锁,用CAS + 循环重试,实现多个线程/多个客户端,并发修改数据的问题 使用AtomicStampedRefer ...
- Python介绍与安装
Python 是一种面向对象的解释型程序设计语言,支持支持面向过程.函数式和面向对象编程.另外,Python可以在Windows.UNIX等多个操作系统上使用. 为什么学编程 编程是一种工具,可以实现 ...
- Android关于API level、buildToolVersion、CompileSdkVersion
API level: API level是一个整数,它指的是我们使用的框架(Framework)的版本,也就是我们使用的sdk中的各个平台下的android.jar. 但是这个API level又和A ...
- springboot读取配置注解@ConfiguratioinProperties和@Value的区别
- Unity之AssetBundle打包
AssetBundle Resources:表示U3D自动将资源打成一个AssetBundle包,所有放在Resources下的文件夹都会打成一个AssetBundle包,资源非常大,Resource ...
- 解决yum安装ftp提示仓库 的 GPG 密钥已安装,但是不适用于此软件包。
遇到的问题: 在linux系统使用yum install ftp安装ftp,报以下错误 warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature ...
- redis 动态修改配置与备份文件目录
redis-cli -c -h 10.1.1.1 -p 7000 获取所有可以配置的KEY config get * 设置KEY config set * 配置重新写入配置文件 CONFIG REWR ...
- layui超链接追加tab选项卡必须手动刷新才出现问题
在admin.js中tabAdd方法里 var li = $("#WeTabTip li[lay-id=" + id + "]").length;中的id外面加 ...
- redis使用规范文档 20170522版
运维redis很久了,一直是口头给rd说各种要求,尝试把这些规范总结成文档 摘选一些可能比较通用的规则如下: 强制:所有的key设置过期时间(最长可设置过期时间10天,如有特殊要求,联系dba说明原因 ...