## 1、定义抽象类
如果一个类只定义了一个为所有子类共享的一般形式,至于细节则交给每一个子类去实现,这种类没有任何具体的实例,只具有一些抽象的概念,那么这样的类称为抽象类。语法格式如下:
```
[访问修饰符] abstract class 类名 {
[访问修饰符] abstract 返回值类型 方法名(参数列表);
}
```
abstract 表示该类或该方法是抽象的,如果在一个方法之前使用 abstract 来修饰,则说明该方法是抽象方法,不能有方法体。
包含一个或多个抽象方法的类必须通过在其 class 声明前添加 abstract 关键字将其声明为抽象类。因为一个抽象类不定义完整的实现,所以抽象类也就没有自己的对象。因此,任何使用 new 创建抽象类对象的尝试都会导致编译时错误。
```
public abstract class Aniaml {}
```
## 2、抽象方法
* 使用abstract修饰的方法我们称之为抽象方法。
* 抽象方法不含有方法体的。
* 含有抽象方法的类一定是抽象类,抽象类不一定有抽象方法。
* abstract 关键字只能用于普通方法,不能用于 static 方法或者构造方法中。
```
public abstract class Animal {
public abstract void eat();
}
```
【选择】下面代码怎么修改可以编译时不报错()(选择两项)
```
public abstract class Bike {
int colorNum;
int brand;
int speed;
public abstract void speedup();
}
public class SpeedBike extends Bike { // (1)
public void speedup(); // (2)
}
```
```
A 在位置一处将 SpeedBike 类设为抽象类,同时将位置二处的 speedup 也设为抽象方法
B 将位置一中的 public 改为 final
C 将位置二中 speedup() 方法改为抽象方法
D 将位置二中 speedup() 方法中加入方法的实现
```
【选择】下列选项中,关于 Java 的抽象类和抽象方法说法不正确的是()(选择一项)
```
A 抽象类和抽象方法都通过 abstract 关键字类修饰
B 抽象类中必须包含抽象方法
C 抽象方法只有方法声明,没有方法实现
D 子类如果不重写父类所有的抽象方法,则必须设置为抽象类
```
【编程】定义一个抽象类图形 Shape 类,由该派生出两个子类圆 Circle 类和矩形 Rectangle 类。Shape 里声明了抽象方法 area(),该方法分别在两个子类里得到实现。程序参考运行效果图如下:
```
圆的面积为 38.465
矩形的面积为 30.0
```
```
public class Test {
public static void main(String[] args) {
// 1. 创建类的实例,并分别对圆的半径和矩形的长宽进行赋值
// 2. 调用 area() 方法,输出结果
}
}
public abstract class Shape {
// 抽象方法 area()
}
public class Circle extends Shape {
// 属性:圆的半径 r
// 创建带参数构造方法以及无参构造方法
// 创建针对半径的赋值和取值方法
// 重写父类中 area() 方法
}
public class Rectangle extends Shape {
// 属性:矩形的长 length、宽 wide
// 创建带参构造方法以及无参构造方法
// 创建针对长、宽的赋值和取值方法
// 重写父类的 area() 方法
}
```
- 阶段一 Java 零基础入门
- 步骤1:基础语法
- 第01课 初识
- 第02课 常量与变量
- 第03课 运算符
- 第04课 选择结构
- 第05课 循环结构
- 第06课 一维数组
- 第08课 方法
- 第09课 数组移位与统计
- 第10课 基础语法测试
- 第09课 基础语法测试(含答案)
- 步骤2:面向对象
- 第01课 类和对象
- 第02课 封装
- 第03课 学生信息管理
- 第04课 继承
- 第05课 单例模式
- 第06课 多态
- 第07课 抽象类
- 第08课 接口
- 第09课 内部类
- 第10课 面向对象测试
- 第10课 面向对象测试(含答案)
- 步骤3:常用工具类
- 第01课 异常
- 第02课 包装类
- 第03课 字符串
- 第04课 集合
- 第05课 集合排序
- 第06课 泛型
- 第07课 多线程
- 第08课 输入输出流
- 第09课 案例:播放器
- 第10课 常用工具测试(一)
- 第10课 常用工具测试(一)(答案)
- 第10课 常用工具测试(二)
- 第10课 常用工具测试(二)(答案)
- 阶段二 从网页搭建入门 JavaWeb
- 步骤1:HTML 与 CSS
- 第01课 HTML 入门
- 第01课 HTML 入门(作业)
- 第02课 CSS 入门
- 第02课 CSS 入门(作业)
- 第03课 CSS 布局
- 第03课 CSS 布局(作业)
- 步骤2:JavaScript 与前端案例
- 第01课 JavaScript 入门
- 第01课 JavaScript 入门(作业)
- 第02课 仿计算器
- 第03课 前端油画商城案例
- 第04课 轮播图
- 第05课 网页搭建测试
- 第05课 网页搭建测试(含答案)
- 步骤3:JavaScript 教程
- 入门
- 概述
- 基本语法
- 数据类型
- 概述
- 数值
- 字符串
- undefined, null 和布尔值
- 对象
- 函数
- 数组
- 运算符
- 算术运算符
- 比较运算符
- 布尔运算符
- 位运算符
- 运算顺序
- 语法专题
- 数据类型的转换
- 错误处理机制
- 标准库
- String
- Date
- Math
- DOM
- 概述
- Document 节点
- 事件
- EventTarget 接口
- 事件模型
- 常见事件
- 阶段三 数据库开发与实战
- 步骤1:初始数据库操作
- 第01课 数据类型
- 第02课 表的管理
- 第03课 数据管理
- 第04课 常用函数
- 第05课 JDBC 入门
- 第06课 Java 反射
- 第07课 油画商城
- 第08课 数据库基础测试
- 步骤2:MyBatis 从入门到进阶
- 第01课 IntelliJ IDEA 开发工具入门
- 第02课 Maven 入门
- 第03课 工厂模式
- 第04课 MyBatis 入门
- 第05课 MyBatis 进阶
- 第06课 商品信息管理
- 第07课 MyBatis 基础测试
- 步骤3:Redis 数据库与 Linux 下项目部署
- 第01课 Linux 基础
- 第02课 Linux 下 JDK 环境搭建及项目部署
- 第03课 Redis 入门
- 阶段四 SSM 到 Spring Boot 入门与综合实战
- 步骤1:Spring 从入门到进阶
- 第01课 Spring 入门
- 第02课 Spring Bean 管理
- 第03课 Spring AOP
- 第04课 基于 AspectJ 的 AOP 开发
- 第05课 JDBC Template
- 第06课 Spring 事务管理
- 第07课 人员管理系统开发
- 第08课 Spring 从入门到进阶测试
- 步骤2:Spring MVC 入门与 SSM 整合开发
- 第01课 Spring MVC 入门与数据绑定
- 第02课 Restful 风格的应用
- 第03课 SpringMVC 拦截器
- 第04课 办公系统核心模块
- 步骤3:Spring Boot 实战
- 第01课 Spring Boot 入门
- 第02课 校园商铺项目准备
- 第03课 校园商铺店铺管理
- 第04课 校园商铺商品管理及前台展示
- 第05课 校园商铺框架大换血
- 步骤4:Java 面试
- 第01课 面试准备
- 第02课 基础面试技巧
- 第03课 Web基础与数据处理
- 第04课 主流框架