方法名相同,但实现的功能不同。重写和重载可以实现类的多态性,如子类重写父类方法。
例1、方法名相同,参数个数不同,参数类型不同。
public class Calculate { final float PI=3.14f; public float getArea(float r) {//一个参数 float area=PI*r*r;//圆面积 return area; } public float getArea(float l,float w) {//重载,两个参数 float area=l*w;//矩形面积 return area; } public void draw(int num) {//整型参数 System.out.println("int:"+num); } public void draw(String shape) {//重载,字符型参数 System.out.println("String"); } public static void main(String[] args) { Calculate s=new Calculate(); float l=20; float w=30; float rectangle=s.getArea(l,w);//自动调用对应的方法 System.out.println("矩形面积为:"+rectangle); float r=7; float circle=s.getArea(r);//自动调用对应的方法 System.out.println("圆的面积为:"+circle); int num=7; s.draw(num);//自动调用对应的方法 s.draw("三角形");//自动调用对应的方法 } }
例2、几何图形都有共同属性(形状名称、面积)(抽象类),具体的长宽、半径等具体属性在具体类中定义。
抽象类讲解,参考 https://www.ibm.com/developerworks/cn/java/l-javainterface-abstract/index.html
//抽象类,不能实例化。实例化在具体的类(三角形、矩形)中 public abstract class Shape { public String getName() { return this.getClass().getSimpleName();//获取类名,形状 } public abstract double getArea(); }
public class Circle extends Shape{ private double r; public Circle(double r) {//圆的半径 this.r=r; } public double getArea() { return Math.PI*Math.pow(r, 2);//面积公式 } }
public class Rectangle extends Shape{ private double l; private double w; public Rectangle(double l,double w) {//矩形的长宽 this.l=l; this.w=w; } public double getArea() {//矩形的面积 return l*w; } }
public class Test { public static void main(String[] args) { Circle c=new Circle(1);//赋值半径 System.out.println(c.getName());//名称 System.out.println(c.getArea());//面积 Rectangle rec=new Rectangle(1,1);//赋值长宽 System.out.println(rec.getName());//名称 System.out.println(rec.getArea());//面积 } }