抽象方法
1.由abstract修饰
2.只有方法的定义,没有方法的实现,没有大括号
抽象类
1.由abstract修饰
2.包含抽象方法的类都必须是抽象类,不包含抽象方法也可以声明为抽象类(不建议)
3.抽象类不能被实例化,不能new
4.抽象类是需要被继承的
子类:
1.重写所有的抽象方法–常用
2.子类也为抽象类—不常用
5.抽象类的意义:
1.包含公共的属性和行为,被子类所共享–代码的复用性
2.为所有子类提供一种公共的类型—向上造型
3.包含抽象方法,为子类提供一个统一的入口,子类有不同的实现
abstract和final不能同时修饰一个类,abstract必须被继承,final不能被继承,矛盾冲突
public class ShapeTest {
public static void main(String[] args) {
Shape[] shape =new Shape[6];
shape[0]= new Sqaure(1);//向上造型
shape[1]= new Sqaure(2);
shape[2]= new Sqaure(3);
shape[3]= new Circle(1);
shape[4]= new Circle(2);
shape[5]= new Circle(3);
maxArea(shape);
System.exit(0);
}
public static void maxArea(Shape[] shape){
double maxArea=shape[0].area();
int index=0;
for(int i=0;i<shape.length;i++){
double area=shape[i].area();
if(area>maxArea){
maxArea=area;
index=i+1;
}
}
System.out.println("第"+index+"面积最大,"+"最大面积为"+maxArea);
}
}
abstract class Shape{//抽象类
protected double c;
abstract double area();//抽象方法
}
class Sqaure extends Shape{
public Sqaure(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;//抽象方法在子类中不同的实现
}
}
接口
1.是一个标准,规范
2.由interface定义
3.只能包含常量和抽象方法,不能有变量和普通方法
4.接口不能被实例化
5.接口是需要被实现的/继承的,实现类/子类,必须重写接口中的所有抽象方法,方法前加public
6.一个类可以实现多个接口,用逗号分割,若又继承又实现时,应先继承后实现implements
7.接口可以继承接口
类对类——继承
接口对接口—继承
类对接口—-实现
接口可以看成是特殊的抽象类,既只包含抽象方法的抽象类,接口是完全抽象的抽象类