多态

方法名相同,但实现的功能不同。重写和重载可以实现类的多态性,如子类重写父类方法。

例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());//面积
    }
}
复制代码

 

posted @   夕西行  阅读(189)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示