Contents
11.1. 抽象类¶
11.1.1. 抽象类概念¶
作为父类Figure(几何图形)并不知道在实际使用时有多少个子类,目前有椭圆形和三角形,那么不 同的用户需求可能会有矩形或圆形等其他几何图形,而onDraw方法只有确定是哪一个子类后才能具体 实现。Figure中的onDraw方法不能具体实现,所以只能是一个抽象方法。
Figure是抽象类,Ellipse和Triangle是Figure子类实现Figure的抽象方法onDraw。
在Java中抽象类和抽象方法的修饰符是abstract
11.1.2. 抽象类声明和实现¶
FirGure.java
package ChouxiangClass01;
public abstract class FirGure {
// 绘制几何图形方法
public abstract void onDraw();
}
Ellipse.java
package ChouxiangClass01;
public class Ellipse extends FirGure {
// 绘制几何图形方法
@Override
public void onDraw() {
// TODO 自动生成的方法存根
System.out.println("绘制椭圆形!");
}
}
Triangle.java
package ChouxiangClass01;
public class Triangle extends FirGure {
// 绘制三角形
@Override
public void onDraw() {
// TODO 自动生成的方法存根
System.out.println("绘制三角形!");
}
}
调用入口
package ChouxiangClass01;
public class HelloWorld {
public static void main(String[] args) {
// f1变量是父类类型,指向子类实例,发生多态
FirGure f1 = new Triangle();
f1.onDraw();
// f2变量是父类类型,指向子类实例,发生多态
FirGure f2 = new Ellipse();
f2.onDraw();
}
}
/*
绘制三角形!
绘制椭圆形!
*/
总结:
设计抽象方法目的就是让子类来实现的,否则抽象方法就没有任何意义
抽象类不能被实例化,只有具体类才能被实例化。
11.1.3. abstract与继承的关系¶
bike.java
package com.a123.cn;
// 一个抽象的bike类
abstract class bike {
public String name="抽象类的成员变量";
public String getName() {
// 返回成员变量name
return name;
}
// 抽象方法
abstract public String getMes();
}
Racing_car.java
package com.a123.cn;
/**
* Racing car 赛车类,继承bike抽象类,实现bike抽象类中的方法
* 可以在bike抽象类中先写好要实现的功能,写个抽象的蓝图
*/
public class Racing_car extends bike {
@Override
public String getMes() {
return getName();
}
public static void main(String[] args) {
Racing_car h1 = new Racing_car();
System.out.println("bike抽象类中的抽象方法信息是:" + h1.getMes());
}
}
/*
bike抽象类中的抽象方法信息是:抽象类的成员变量*/