抽象方法
1.由abstract修饰
2.只有方法的定义,没有方法的实现(大括号都没有)
抽象类
1. 由abstract修饰
2.包含抽象方法的类必须是抽象类,不包含抽象方法的类也可以声明为抽象类
3.抽象类不能被实例化
4.抽象类是需要被继承的,子类:
4.1 重写所有抽象方法–常用
4.2 也声明为抽象类–不常用
5.抽象类的意义:
5.1 包含公共的属性和行为,被子类所共享–代码重用
5.2 为所有子类提供一种统一的类型–向上造型
5.3包含抽象方法,为子类提供一个统一的入口
子类有不同的实现
找一组图形中的最大面积
public class ShapeTest {
public static void main(String[] args) {
//new Shape();//编译错误,抽象类不能被实例化
Shape[] shapes=new Shape[4];//创建shape数组对象
shapes[0]=new Square(1);
shapes[1]=new Square(2);//大
shapes[2]=new Circle(1);
shapes[3]=new Circle(2);//大
maxArea(shapes);
}
public static void maxArea(Shape[] shapes){//找最大面积
double max=shapes[0].area();
int maxIndex=0;
for(int i=1;i<shapes.length;i++){
double area=shapes[i].area();
if(area>max){
max=area;
maxIndex=i;
}
}
System.out.println("最大面积:"+max+",所在下标为:"+maxIndex);
}
}
abstract class Shape{//抽象类
protected double c;//周长
public abstract double area();//抽象方法
}
class Square extends Shape{
public Square(double c){
this.c=c;
}
public double area(){//重写抽象方法
return 0.0625*c*c;
}
}
class Circle extends Shape{
public Circle(double c){
this.c=c;
}
public double area(){
return 0.0796*c*c;
}
}