文档章节

深入理解Java中的抽象类和接口

FunGa
 FunGa
发布于 2015/11/03 09:58
字数 1065
阅读 307
收藏 6

对于面向对象编程来说,抽象是它的一大特征。在Java中,可以通过两种形式来体现OOP的抽象:抽象类和接口。这两者有太多向内的地方,又有太多不同的地方。很多人在初学的时候以为它们可以随意互换使用,但是实际则不然。今天我们就一起学习以下Java中的抽象类和接口。

本文发表于个人博客网站FunGa Blog,阅读原文请移步深入理解Java中的抽象类和接口

抽象类

在了解抽象类之前,我们先了解以下抽象方法。抽象方法是种特殊的方法:它只有声明,没有具体实现。抽象方法声明格式如下:

abstract void get();

抽象方法必须用abstract关键字修饰。如果一个类中含有抽象方法,则称这个类为抽象类,抽象类必须使用abstract关键字修饰。因为抽象类中含有没有具体实现的抽象方法,所以不能用抽象类创建对象

抽象类特点

  • 抽象类中可以有成员函数,可以是变量,也可以是常量。

  • 抽象类中可以有抽象方法,也可以有普通方法,还可以有静态方法。

  • 有抽象方法的类必须声明为抽象类,抽象类中不一定有抽象方法。

  • 抽象类可以有构造函数,但是不能创建对象,构造函数用于子类访问父类数据的初始化。

  • 抽象类的子类要么是一个抽象类,如果是一个具体类必须重写抽象类中的抽象方法。

抽象类和普通类区别

  1. 抽象类的方法必须为public或者protected,缺省情况下默认为public(因为如果是private,则不被子类继承,子类无法实现该方法)。

  2. 抽象类不能用来创建对象。

  3. 如果一个类继承一个抽象类,则该类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将该子类定义为抽象类。

接口

接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数。从这里,我们可以体会到Java语言设计的初衷,它是行为的抽象,在Java中,定义接口的形式如下:

public interface Phone {

}

接口特点

  • 接口中可以有变量,但是变量会被隐式的指定为public static final变量,也就是常量(如果用private修饰,编译会报错),一般不在接口中定义变量。

  • 接口中方法只能是抽象方法,全部会被隐式的指定为public abstract,(如果用private、protected、static、final修饰,编译会报错)

  • 接口没有构造函数

抽象类与接口的区别

本文发表于个人博客网站FunGa Blog,阅读原文请移步深入理解Java中的抽象类和接口

  1. 成员区别

  1. 关系区别

  1. 设计理念区别 
    抽象类: 
    强调的是is a关系,抽象类中定义的是共性特征。 
    接口: 
    强调的是like a关系,接口中定义的是扩展功能。

小结

抽象类是具体类的公因式,接口是为了将一些不相关的类“杂凑”成一个共同的群体。通常我们平时开发中就是多用接口,毕竟Java是单继承。但是需要使用抽象类的时候还是可以用的,要是没把握还是用接口。

本文发表于个人博客网站FunGa Blog,阅读原文请移步深入理解Java中的抽象类和接口

© 著作权归作者所有

共有 人打赏支持
FunGa
粉丝 4
博文 10
码字总数 11477
作品 0
东城
私信 提问
java_面试_01_一个月的面试总结(java)

重点知识 由于我面试的JAVA开发工程师,针对于JAVA,需要理解的重点内容有: JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻) JVM内存调优(了解是怎么回事,一般做项...

rayner
2018/03/07
0
0
13《Java核心技术》之接口和抽象类有什么区别?

一、提出问题 Java 是非常典型的面向对象语言,曾经有一段时间,程序员整天把面向对象、设计模式挂在嘴边。虽然如今大家对这方面已经不再那么狂热,但是不可否认,掌握面向对象设计原则和技巧...

飞鱼说编程
2018/10/29
0
0
学Android开发,入门语言java知识点

Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学java语言吧。 Android开发入门教程 -Java语言,最差...

抉择很难
2015/12/11
185
0
接口和抽象类有什么区别?Java编程学习

  接口在JAVA语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。   接口并不是类,虽然编写接口的方式和类很相...

zhouzhou2018
2018/05/25
0
0
JAVA接口的概念、分类及与抽象类的区别

Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(...

郭二翔
2011/12/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot2.x配置Cors跨域

1 跨域的理解 跨域是指:浏览器A从服务器B获取的静态资源,包括Html、Css、Js,然后在Js中通过Ajax访问C服务器的静态资源或请求。即:浏览器A从B服务器拿的资源,资源中想访问服务器C的资源。...

hengbao5
39分钟前
1
0
mybatis(7) - 分页

一般程序在处理sql分页的场景,要么选择在程序中对所有的结果集sublist,要么在写sql时指定limit。那如何利用mybatis的特性在处理分页呢? 分页插件 适用于数据量大的情况下。 在真正执行sql...

noob_fly
39分钟前
0
0
SpringBoot之使用jpa/hibernate

Springboot版本是2.1.3.RELEASE 1、依赖 List-1.1 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependenc......

克虏伯
51分钟前
1
0
安卓手机如何快速投屏到windows(10/8.1/7)电脑上

前提: 手机和电脑连接的网络必须在同一局域网下。 优势: 手机和电脑不需要下载对应平台的应用,完全使用全系统自带功能。 附加: 以下演示是安卓手机和windows操作系统电脑,并且win10和win10...

皇冠小丑
今天
20
0
python政府工作报告词云

import jiebaimport wordcloudfrom scipy.misc import imreadmask = imread("chinamap.jpg")f = open("新时代中国特色社会主义.txt","r",encoding="utf-8")t = f.read()f.close()ls =......

zhangshs
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部