抽象类

抽象类是介于普通类(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. 当浏览器窗口大小发生变化时,重新绘制JsPlumb中的线条、端点

    1 window.addEventListener('resize', () => { 2 this.plumbInstance.repaintEverything() 3 }) 参考文章:ht ...

  2. Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道

    Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道 背景 上一讲我们介绍了创建子进程的方式.我们都知道,创建子进程是为了与父进程协作(或者是为了执行新的程序,参考 Linux ...

  3. python常用模块numpy解析(详解)

    numpy模块 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 后打开浏览器输入网址http://local ...

  4. Java基础系列-单例的7种写法

    原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755322.html 一.概述 Java中单例有7种写法,这个是在面试中经常被问到的内容,而且有时候 ...

  5. 7、Django之模型层第二篇:多表操作

    一 表关系回顾 在讲解MySQL时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的. 比如我们开发一个员工管理系统,在数据库里只创建一张员工信息表,该表有四个字段:工号.姓名.部门名.部门职 ...

  6. Java—递归

    递归 1. 概述 方法中调用当前方法 2. 递归需要注意的事项 递归次数不能过多,否则内存溢出 3. 案例 3.1 获取指定目录下的文件名 public class AllDirPath { /* * ...

  7. C语言I博课作业04

    这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2020-1/homework/11489 我在这个作业课程 ...

  8. Java的图形打印

    1.菱形 复制代码 package Java_Learn.File; public class Main1 { public static void main(String[] args) { pri ...

  9. 1. Spark的安装及介绍

    *以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第一部分是记录如何安装Spark?同时,简单介绍下Spark. 一.Spark安装 二.Spark介绍 一.Spark安装 如 ...

  10. mdp文件-Chapter3-NPT.mdp

    mdp系列的第三篇,对NPT模拟中的mdp文件做一简单介绍. 先上代码 1 title = OPLS Lysozyme NPT equilibration 2 define = -DPOSRES ; ...