Java基础教程——抽象类
抽象类
抽象类是介于普通类(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基础教程——抽象类的更多相关文章
- Java基础教程(18)--继承
一.继承的概念 继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...
- Java基础教程:面向对象编程[3]
Java基础教程:面向对象编程[3] 内容大纲 基础编程 获取用户输入 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入.我们可以查看Ja ...
- Java基础教程(25)--I/O
一.I/O流 I/O流表示输入源或输出目标.流可以表示许多不同类型的源和目标,例如磁盘文件.设备.其他程序等. 流支持许多不同类型的数据,包括字节.原始数据类型.字符和对象等.有些流只传递数据 ...
- Java基础九--抽象类
Java基础九--抽象类 一.抽象类介绍 /*抽象类:抽象:笼统,模糊,看不懂!不具体. 特点:1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰. 抽象方法必须定义在抽象类中 ...
- Java基础教程(12)--深入理解类
一.方法的返回值 当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...
- Java基础教程:注解
Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...
- Java基础教程:网络编程
Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...
- Java基础教程(5)--变量
一.变量 1.变量的定义 正如上一篇教程<Java基础教程(4)--面向对象概念>中介绍的那样,对象将它的状态存在域中.但是你可能仍然有一些疑问,例如:命名一个域的规则和惯例是什么?除 ...
- Java基础教程:Lambda表达式
Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...
随机推荐
- 当浏览器窗口大小发生变化时,重新绘制JsPlumb中的线条、端点
1 window.addEventListener('resize', () => { 2 this.plumbInstance.repaintEverything() 3 }) 参考文章:ht ...
- Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道
Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道 背景 上一讲我们介绍了创建子进程的方式.我们都知道,创建子进程是为了与父进程协作(或者是为了执行新的程序,参考 Linux ...
- python常用模块numpy解析(详解)
numpy模块 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 后打开浏览器输入网址http://local ...
- Java基础系列-单例的7种写法
原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755322.html 一.概述 Java中单例有7种写法,这个是在面试中经常被问到的内容,而且有时候 ...
- 7、Django之模型层第二篇:多表操作
一 表关系回顾 在讲解MySQL时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的. 比如我们开发一个员工管理系统,在数据库里只创建一张员工信息表,该表有四个字段:工号.姓名.部门名.部门职 ...
- Java—递归
递归 1. 概述 方法中调用当前方法 2. 递归需要注意的事项 递归次数不能过多,否则内存溢出 3. 案例 3.1 获取指定目录下的文件名 public class AllDirPath { /* * ...
- C语言I博课作业04
这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2020-1/homework/11489 我在这个作业课程 ...
- Java的图形打印
1.菱形 复制代码 package Java_Learn.File; public class Main1 { public static void main(String[] args) { pri ...
- 1. Spark的安装及介绍
*以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第一部分是记录如何安装Spark?同时,简单介绍下Spark. 一.Spark安装 二.Spark介绍 一.Spark安装 如 ...
- mdp文件-Chapter3-NPT.mdp
mdp系列的第三篇,对NPT模拟中的mdp文件做一简单介绍. 先上代码 1 title = OPLS Lysozyme NPT equilibration 2 define = -DPOSRES ; ...