一、抽象类
1.1定义—以画图形为例
package g;
//有抽象方法的类必须声明为抽象类,因此GraphicObject需要添加关键字abstract
//抽象类不能被实例化,类本来就是不健全的,要创建一个对象,那肯定是不行的
abstract class GraphicObject{
//class GraphicObject{}不声明为抽象会报错会报错
protected int x;
protected int y;
public GraphicObject(int x, int y) {
this.x = x;
this.y = y;
}//构造器
void moveTo(int x,int y) {
this.x = x;
this.y = y;
//moveTo方法,新坐标位置
}
public void showLocation() {
System.out.println("x="+x+",y="+y);
}
// 抽象方法没有方法体,即代码块
// 声明为抽象方法,因为不知道如何去实现它
// 如果父类声明了抽象的方法,那么子类就必须要实现它(父亲没有完成这个功能,孩子要去实现),
// 因此这个方法对所有的子类进行了约束
abstract void draw();
//void draw(){draw()方法,不确定要画什么,无法实现,什么都没做,相当于抽象功能},需要
//在前面加abstract声明,且不加代码块
}
abstract class Circle extends GraphicObject{
//要重写构造器,因为构造器不属于类成员,不能被继承
Circle(int x,int y){
super(x,y);
}
//子类必须实现父类的抽象方法,否则这个类必须声明为抽象类
// public void draw() {
// System.out.println("画一个圆,["+x+y+"]");
//
// }
}
class Rectangle extends GraphicObject{
Rectangle(int x,int y){
super(x,y);
}
//子类必须实现父类的抽象方法,否则这个类必须声明为抽象类
public void draw() {
System.out.println("画一个矩形,["+x+","+y+"]");
}//因为有不同的实现内容,所以要重写方法
}
public class day808 {
public static void main(String[] args) {
// 如果类是抽象的,即什么都没做,不应该能具体的对象(图像)
// 抽象类不能创建对象
// GraphicObject g=new GraphicObject(0,0);
//
// Circle c =new Circle(0,0);//当Circle类声明为抽象类时,抽象类不能创建对象
// c.showLocation();
// c.draw();
Rectangle r=new Rectangle(5,6);
r.showLocation();
r.draw();
}
}
二.补充说明