多态:是同一个行为具有多个不同表现形式或形态的能力。
在代码的运用中主要是关于子类中方法的重写,实现了同一个父类接口可以进行不同子类中重写的方法
public class GeometricOject {//父类 public double findArea(){ return 0.0; } } public class Circle extends GeometricOject{//子类 private double radius; public Circle(double radius){ this.radius=radius; } @Override public double findArea() { return Math.PI*radius*radius; } } public class MyRectangle extends GeometricOject{//子类 private double height; private double width; public MyRectangle(double height,double width){ this.width=width; this.height=height; } @Override public double findArea() { return height*width; } }
public class GeometricTest { public static void main(String[] args) { GeometricTest test=new GeometricTest(); Circle c=new Circle(5); MyRectangle m=new MyRectangle(3,5); test.displayGeoetricTest(c); test.displayGeoetricTest(m); } public void displayGeoetricTest(GeometricOject g){//相当于GeometricOject g=new Circle(); System.out.println(g.findArea()); } }
在GeometricTest中,我们声明了displayGeoetricTest方法,我们的接口是父类类型,但是我们传给他的却是子类Circle和子类MyRectangle类型,在编译器中认为是调用父类的findArea,但在实际代码运行中调用的是子类中findArea方法,从而实现多态——一个接口调用了不同子类中重写的方法,也可写作GeometricOject g=new Circle();但是多态也有局限性,不能使用此方法调用子类中特有的方法
多态的使用有以下三个要求:
- 继承
- 重写
- 父类引用指向子类对象:Parent p = new Child();