Java多态

简介

同一方法作用于不同类的实例,将产生不同的执行结果。即"一个对外接口的方法有多种表现形式"。
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
Java中,父类的引用既可以指向父类的对象,也可以指向子类的对象,但子类的引用不能指向父类的对象

必要条件

  • 要有继承(或实现接口)
  • 要有重写
  • 父类引用指向子类对象:Parent p = new Child();

多态优点

  • 可扩充性
  • 接口性
  • 简洁灵活

实现方式

  • 继承父类,重写父类方法
  • 实现接口,重写接口方法

案例

父类Shape:

public class Shape {
    void draw() {
        System.out.println("Shape.draw()");
    };
}

子类Circle:

public class Circle extends Shape {
    void draw() {
        System.out.println("Circle.draw()");
    }
    void cirCleDraw(){
        System.out.println("Circle.cirCleDraw()");
    }
}

子类Square:

public class Square extends Shape {
    @Override
    void draw() {
        System.out.println("Square .draw()");
    }
}

测试类Test:

public class Test {
    public static void main(String[] args) {
        Shape s = new Circle(); // 父类引用指向子类对象
        s.draw();
    }
}

运行结果:
Circle.draw()

注意,用子类引用指向父类对象会报错,父类引用调用子类特有的方法会报错,如下所示:

Circle c = new Shape(); // IDEA检测报错
Shape s = new Circle(); // 父类引用指向子类对象
s.cirCleDraw(); // IDEA检测报错

如有错误,欢迎指正!

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值