Java 接口与抽象类
抽象类
《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”。只要用abstract修饰的类就是抽象类,抽象类不一定包含抽象方法,但有抽象方法的类一定是抽象类。抽象方法是用abstract关键字修饰的方法,不用实现方法细节,由继承了它的子类去实现。
[public] abstract class ClassName {
abstract void fun();
}
抽象类注意三点:
- 抽象方法必须为public或protected,因为private无法被子类继承,就无法实现该方法,默认为public.
- 抽象类不能创建对象.
- 如果子类继承的父类是抽象类,而没有实现它的抽象方法,那么子类也必须修饰为abstract.
接口
接口(interface)在软件工程泛指供别人调用的方法或函数。在Java中,接口是一种行为的抽象,比抽象类更加抽象的极度抽象类型,接口中定义的变量都会被修饰为public static final
,而且必须赋初值,因此接口中只有常量;接口中的方法只能是public abstract
修饰的,其它的会报错。
[public] interface InterfaceName {
public static final String s = "hello";
public abstract void fun();
}
接口注意两点:
- 接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是公开(public)类型的,确保外部使用者能访问它们
- 接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量,被final修饰后就变为了常量。
接口与抽象类的区别
语法层面
- 抽象类可以提供成员方法的实现细节,而接口只有抽象方法
- 抽象类可以有各个类型的成员变量,而接口只有public static final型的
- 抽象类中可以有静态和非静态代码块,而接口不行
- 一个类只能继承一个抽象类,可以实现多个接口
设计层面
抽象类是一种事物的抽象,而接口是一种行为的抽象。简单来说,抽象类为继承的子类提供了一个模板,子类根据实际需求实现不同的细节,就像Android开发中为Activity绑定Fragment的过程,许多代码都是不变的,只是实现不同的Fargment实例,这就可以创建一个抽象类,将创建实例的过程定义在抽象方法中,而其它的部分定义在普通方法中,大大减少了代码量;接口相当于定义了一个行为,比如Fly,Bird类可以实现这个接口,拥有飞的行为,而Dog类则不行。继承关系强调“是不是”,而接口强调“有没有”。
接口的写法
接口不能实例化,也就是直接new出来,但我们常会看到这两种写法
List<String> list = new ArrayList<>();
public Runnable r = new Runnable()
{
@Override
public void run()
{
//Details
}
}
前一种是Java的多态,list可以指向实现它的接口的类;后一种是匿名内部类的写法,详解见Java--匿名内部类
Java 接口与抽象类的更多相关文章
- java 接口和抽象类的区别
java 接口和抽象类的区别抽象类:1.含有抽象方法的类一定为抽象类,反过来抽象类,不一定含有抽象方法:2.抽象类必须用abstract来进行定义,抽象方法也必须用abstract来进行定义:3.抽象 ...
- 初探设计:Java接口和抽象类何时用?怎么用?
今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”.哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的 ...
- Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类?
Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类? 2013-01-05 17:16:09| 分类: JAVA | 标签:java |举报|字号 订阅 下面比较一下两者的 ...
- Java接口和抽象类的区别
今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...
- java接口和抽象类
关于接口 1.创建一个接口,需要使用interface关键字. 2.实现一个接口,需要使用implements关键字. 3.接口的成员属性都是静态常量(默认public static final). ...
- java接口与抽象类的区别
接口可以是标志接口,里面没有任何常量和方法. 抽象类不一定必须有抽象方法,也可也没有方法,但含抽象方法的类必须被声明为抽象类. 在抽象层次结构中,Java接口在最上面,然后紧跟着抽象类,然后是一般类. ...
- Java接口和抽象类的实现方法
一.java中的接口本质上是加约束的抽象类 //抽象类 public abstract class AExample { public abstract int add(int x,int y); p ...
- Java 接口和抽象类差别
原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想非常大程度上取决于它的总体架构,而这个总体架构事实上 ...
- Java接口和抽象类的理解
接口和抽象类的相同之处就是 都会有抽象方法 抽象方法就是一个没有方法体 等待继承的子类完成的方法 然而接口比较严格 它的方法必须是抽象方法且是公开的 抽象类 可以有自己的属性 和 实体方法 首相用面向 ...
- java接口与抽象类
本片随笔讲讲java中接口与抽象类. 一,接口 1.什么是接口? 那在日常生活中接口是什么呢?就是两个对象之间进行连接的部分就是接口,就比如热水器与水管的接口一样,他可以确保不同的东西之间的顺利连接, ...
随机推荐
- listen系统调用
/* * Perform a listen. Basically, we allow the protocol to do anything * necessary for a listen, and ...
- Vagrant 无法校验手动下载的 Homestead Box 版本
起因 4年前电脑,配置不太好了,现有的 Homestead 运行起来太吃内存.在修改了 Homestead.yaml 文件里 memory 选项的内存配置为 1024 后,应用最新配置重启失败. 索性 ...
- Serv-U 的升级及数据备份和迁移【转】
Serv-U 配置备份 在serv-u7.x及以上版本安装目录下,有一个文件Serv-U.Archive是serv-u的配置文件,有一个users文件夹是Serv-U的域和用户的信息,那么我们只需 ...
- mysql -> 备份与恢复_11
备份恢复原理 逻辑备份 物理备份 备份工具
- git —— bug分支
储藏工作现场 $ git stash 切换到需要修改bug的分支,创建临时分支 修复bug,修复完提交 修复完之后,切换到需要修改的分支.完成合并 合并后删除临时分支 完成后,可以重新回到没有修改完的 ...
- JS中给函数参数添加默认值
最近在Codewars上面看到一道很好的题目,要求用JS写一个函数defaultArguments,用来给指定的函数的某些参数添加默认值.举例来说就是: // foo函数有一个参数,名为x var f ...
- java小爬虫
爬取煎蛋网 1.找出页面网址的规律 2.设计页面图片网址的正则 代码: import java.io.BufferedInputStream; import java.io.BufferedOutpu ...
- 一步一步学习IdentityServer4 (7) IdentityServer4成功配置全部配置
auth.liyouming.com 全部配 public class Startup { public Startup(IConfiguration configuration) { Configu ...
- 【LOJ】#2542. 「PKUWC2018」随机游走
题解 虽然我知道minmax容斥,但是--神仙能想到把这个dp转化成一个一次函数啊= = 我们相当于求给定的\(S\)集合里最后一个被访问到的点的时间,对于这样的max的问题,我们可以用容斥把它转化成 ...
- hdoj2602 Bone Collector(DP,01背包)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2602 题意 有n块骨头,每块骨头体积为volume,价值为value,还有一个容量为v的背包,现在将骨 ...