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.什么是接口? 那在日常生活中接口是什么呢?就是两个对象之间进行连接的部分就是接口,就比如热水器与水管的接口一样,他可以确保不同的东西之间的顺利连接, ...
随机推荐
- Jetson TX1 安装Kinect驱动
1.添加Universe源 $ sudo apt-add-repository universe $ sudo apt-get update 2.安装编译工具和依赖项 $ sudo apt-get i ...
- 【Linux技术】autotools制作makefile过程详解【转】
转自:http://www.cnblogs.com/lcw/p/3159461.htmlPreface Makefile固然可以帮助make完成它的使命,但要承认的是,编写Makefile确实不是一件 ...
- shell 数组基础->
数组其实也算是变量, 传统的变量只能存储一个值, 但数组可以存储多个值. 普通数组:只能使用整数 作为数组索引 [有序 0 1 2 3 4 ]关联数组:可以使用字符串 作为数组索引 [无序 name ...
- python基础--os模块和sys模块
os模块提供对操作系统进行调用的接口 # -*- coding:utf-8 -*-__author__ = 'shisanjun' import os print(os.getcwd())#获取当前工 ...
- 再谈OPENCV(转)
转自:http://blog.csdn.net/carson2005/article/details/6979806 尽管之前写过一篇关于OpenCV的介绍(http://blog.csdn.net/ ...
- ubuntu 创建容器 并ssh 连接容器
1.下载镜像:docker search ubuntu docker pull ubuntu 2. 创建容器 docker run --name spider_frame -p 8888:8888 - ...
- [java笔记]动态数组
private int count;//计数器 private int ary[] = new int [3]; if(count >= ary.length){ //数组动态扩展 int ne ...
- django(2)基本指令
打开 Linux 或 MacOS 的 Terminal (终端)直接在 终端中输入这些命令(不是 python 的 shell中) 如果是 windows 用 cmd(开始 搜索 cmd 或者 快捷键 ...
- Centos之命令搜索命令whereis与which
Centos之命令搜索命令whereis与which whereis 命令名 #搜索命令所在路径及帮助文档所在位置 选项: -b :只查找可执行文件位置 -m:只查找帮助文件 [root@localh ...
- Docker网络和存储
本节内容: Docker网络访问 端口映射 数据管理 一.Docker网络访问 1. docker自带的网络 docker network ls:列出当前docker中已有的网络 docker net ...