目录
一、抽象类的基本概念
二、抽象类总结
三、代码
一、抽象类的基本概念
1、抽象类的定义和使用规则
- 抽象类是在普通类的基础上增加抽象方法的类。
- 抽象类和抽象方法都要使用abstract关键字声明
- 如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可以有 0~n 个抽象方法,以及 0~n 个具体方法。
- 抽象类不能实例化,也就是不能使用 new 关键字创建对象。
2、抽象类的语法
<abstract>class<class_name> {
<abstract><type><method_name>(parameter-iist);
}
- abstract 表示该类或该方法是抽象的;
- class_name 表示抽象类的名称;
- method_name 表示抽象方法名称;
- parameter-list 表示方法参数列表。
注:若一个方法由abstract修饰,则是抽象方法。abstract 关键字只能用于普通方法,不能用于 static 方法或者构造方法中。
3、抽象类的特征
- 抽象方法没有方法体;
- 抽象方法必须存在于抽象类中;
- 子类重写父类时,必须重写父类所有的抽象方法。
注:在使用 abstract 关键字修饰抽象方法时不能使用 private 修饰,因为抽象方法必须被子类重写,而如果使用了 private 声明,则子类是无法重写的。
实例代码
a. 创建一个表示图形的抽象类Shape以及定义一个抽象方法area():
abstract class Shape{
public int width;
public int height;
public Shape(int width, int height){
this.width = width;
this.height = height;
}
public abstract double area(); // 抽象方法,计算面积
}
b. 定义一个正方形类,该类继承Shape类,并重写area()抽象方法:
class Square extends Shape{
public Square(int width, int height) {
super(width, height);
}
@Override
public double area() {
return width * height;
}
}
二、抽象类总结
-
1. 抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
-
2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
-
3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
-
4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
-
5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
三、代码
package Java_learning;
abstract class Shape{
public int width;
public int height;
public Shape(int width, int height){
this.width = width;
this.height = height;
}
public abstract double area(); // 抽象方法,计算面积
}
class Square extends Shape{
public Square(int width, int height) {
super(width, height);
}
@Override
public double area() {
return width * height;
}
}
class Triangle extends Shape{
public Triangle(int width, int height) {
super(width, height);
}
@Override
public double area() {
return 0.5 * width * height;
}
}
public class Day20 {
public static void main(String[] args){
Square square = new Square(5, 4); // 创建正方形类对象
System.out.println("正方形的面积为:" + square.area());
Triangle triangle = new Triangle(2, 5); // 创建三角形类对象
System.out.println("三角形的面积为:" + triangle.area());
}
}
输出结果