抽象类

抽象类是介于普通类(class)和接口(interface)之间的一种特殊类。

接口的方法都不实现,类的方法都必须实现,抽象类里的方法可以实现,可以不实现。

Java 8之后接口中可以实现方法,抽象类的地位有点尴尬,不过因为历史代码中很多抽象类的应用,抽象类的概念也不会被淘汰。

抽象方法:只有方法签名,没有方法实现,必须有abstract修饰。

其实interface中的方法都是抽象方法,但正因为都是,所以不需要刻意声明为abstract。

public abstract void 抽象方法(int 参数1, String 参数2);

抽象类:

  • 声明为abstract的类是为“抽象类”
  • 有抽象方法的类必须声明为抽象类,但抽象类可以没有抽象方法
  • 抽象类不能被实例化,只能被继承;抽象类也是类,不能同时继承多个抽象类
  • 抽象类可以有构造方法,用于被子类调用。
public abstract class 抽象类 {
public abstract void 抽象方法(int 参数1, String 参数2);
public void 非抽象方法() {
System.out.println("非抽象方法有用括号括起来的方法体");
}
}

抽象类的作用

从语义的角度看,抽象类是从多个具体类中抽象出的父类,以抽象类为模板,可以避免子类设计的随意性。

也是为了规范。

示例:

所有动物都需要吃,父类中可以统一实现;但是——

犬科攻击动口,猫科攻击动手,在父类中不方便统一实现。此时建议在父类中定义为“抽象方法”

public class 抽象类 {
public static void main(String[] args) {
Animal _charger = new 猫();
_charger.攻击();
}
}
abstract class Animal {
public void 吃() {
System.out.println("吃");
}
public abstract void 攻击();
}
class 猫 extends Animal {
public void 攻击() {
System.out.println("扑,拍,咬");
}
}
class 犬 extends Animal {
public void 攻击() {
System.out.println("咬");
}
}

抽象类 VS 接口

相同点:

|-包含未实现的方法(或者说,都包含抽象方法)

|-本身不能实例化(都没有完全实现)

不同点:

接口 抽象类
不能包含普通方法(不算默认方法) 可以包含普通方法
可以实现多个 只能继承一个(毕竟也是类)
只能定义“常量”,不能定义普通成员变量 可以定义普通成员变量
没有构造方法 有构造方法
不能定义初始化块 可以定义初始化块

面向对象小结:

面向对象相关单词:

英文 中文
Object-Oriented 面向对象
object 对象
class
property 属性
constructor 构造函数/方法
abstraction 抽象
encapsulation 封装
inheritance 继承
polymorphism 多态
interface 接口
overload 重载
override 重写

Java基础教程——抽象类的更多相关文章

  1. Java基础教程(18)--继承

    一.继承的概念   继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...

  2. Java基础教程:面向对象编程[3]

    Java基础教程:面向对象编程[3] 内容大纲 基础编程 获取用户输入 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入.我们可以查看Ja ...

  3. Java基础教程(25)--I/O

    一.I/O流   I/O流表示输入源或输出目标.流可以表示许多不同类型的源和目标,例如磁盘文件.设备.其他程序等.   流支持许多不同类型的数据,包括字节.原始数据类型.字符和对象等.有些流只传递数据 ...

  4. Java基础九--抽象类

    Java基础九--抽象类 一.抽象类介绍 /*抽象类:抽象:笼统,模糊,看不懂!不具体. 特点:1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰. 抽象方法必须定义在抽象类中 ...

  5. Java基础教程(12)--深入理解类

    一.方法的返回值   当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...

  6. Java基础教程:注解

    Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...

  7. Java基础教程:网络编程

    Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...

  8. Java基础教程(5)--变量

    一.变量 1.变量的定义   正如上一篇教程<Java基础教程(4)--面向对象概念>中介绍的那样,对象将它的状态存在域中.但是你可能仍然有一些疑问,例如:命名一个域的规则和惯例是什么?除 ...

  9. Java基础教程:Lambda表达式

    Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...

随机推荐

  1. 浅谈SRT和NDI®在广电制作领域的技术优势和应用

    随着技术的不断发展,用户对音视频质量的要求不断提升,对视频内容观看的方式也日趋多元化.摄像设备的分辨率从高清到4K,甚至有些厂家推出了6K或8K的产品:用户不再局限于从有线电视的直播节目中收看内容,智 ...

  2. 解放双手,不写SQL!一个开源mybatis神器

    什么是通用 Mapper? 它是一个可以方便的使用 Mybatis 进行单表的增删改查优秀开源产品.它使用拦截器来实现具体的执行 Sql,完全使用原生的 Mybatis 进行操作.在 Github 上 ...

  3. Java 运行时动态生成class

    转载 http://www.liaoxuefeng.com/article/0014617596492474eea2227bf04477e83e6d094683e0536000 Java是一门静态语言 ...

  4. SpringBoot入门最简单的一个项目示例

    使用IDEA创建一个SpringBoot项目 1.1 打开IDEA,文件-New-Project 1.2下一步,选择版本8(根据自己安装的JDK版本来选择) 1.3 下一步后点击Web,勾选Sprin ...

  5. 关于layui图片/文件上传

    一:常规使用   普通文件上传 (传入服务器一张图片) 1.前台代码: <!DOCTYPE html><html><head> <meta charset=& ...

  6. layui下拉框后台动态赋值

    前台页面: <select name="xm" id="xm" lay-verify="required" lay-filter=&q ...

  7. yum针对软件包操作的常用命令

    yum针对软件包操作的常用命令: 1.使用YUM查找软件包 命令:yum search php 2.列出所有可安装的软件包 命令:yum list php 3.列出所有可更新的软件包 命令:yum l ...

  8. 二级Parser应用教程

    01 应用背景 Ubidots是一个物联网云平台,通过设备友好的API(可通过HTTP / MQTT / TCP / UDP协议访问)简单安全地将硬件和数字输入连接到Ubidots Cloud. 它可 ...

  9. 获取元素计算样式getComputedStyle()与currentStyle

    window.getComputedStyle()方法是标准化接口,返回一个对象,该对象在应用活动样式表并解析这些值可能包含的任何基本计算后报告元素的所有CSS属性的值. 私有的CSS属性值可以通过对 ...

  10. nginx&http 第二章 ngx 事件event配置等初始化

    event事件模块,配置分为两层:ngx_events_module 事件模块 和 ngx_event_core_module 事件核心模块.ngx_events_module:模块类型NGX_COR ...