java-多态

Posted sacai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java-多态相关的知识,希望对你有一定的参考价值。

多态


 

• 相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。

  即:多态是同一个行为具有多个不同表现形式或形态的能力。

多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象

技术图片

理论举例:

比如有一个父类superClass,它有2个子类subClass1,subClass2。superClass有一个方法
func(),两个子类都重写了这个方法。那么我们可以定义一个superClass的引用obj,让它指向一个子类的对象,比如superClass obj = new subClass1();那么我们调用obj.func()方法时候,会进行动态绑定,也就是obj它的实际类型的func()方法,即subClass1的func()方法。同样你写superClass obj = new subClass2();obj.func()其实调用的是subClass2的func()方法。这种由于子类重写父类方法,然后用父类引用指向子类对象,调用方法时候会进行动态绑定,这就是多态。多态对程序的扩展具有非常大的作用,比如你要再有一个subClass3,你需要改动的东西会少很多,要是使用了配置文件那就可以不动源代码了。

代码实例:

定义Car接口

package com.it.test;

public interface Car 
    //接口中的方法为抽象方法
    abstract String getName();  //过去汽车名称
    public int getPrice();  //过去汽车售价

BMW继承并重写Car

package com.it.test;
//宝马
public class BMW implements Car 
    @Override
    public String getName() 
        return "BMW";
    

    @Override
    public int getPrice() 
        return 300000;
    

BENZ继承并重写Car

package com.it.test;
//奔驰
public class BENZ implements Car 

    @Override
    public String getName() 
        return "BENZ";
    

    @Override
    public int getPrice() 
        return 400000;
    

Carshop类

package com.it.test;
//汽车出售店
public class Carshop 
    //售车收入
    private int money = 0;
    
    //卖出一台车
    public void sellCar(Car car)
        System.out.println("车型:"+car.getName()+"单价:" + car.getPrice());
        //增加卖出车售价的收入
        money += car.getPrice();
    

    //售车总收入
    public int getMoney()
        return money;
    

    public static void main(String[] args) 
        Carshop carshop = new Carshop();
        //卖出一辆宝马
        Car car = new BMW();
        //卖出一脸奔驰
        Car car1 = new BENZ();
        
        carshop.sellCar(car);
        carshop.sellCar(car1);
        System.out.println("总收入:"+carshop.getMoney());
    

     • 多态给我们带来的好处是消除了类之间的耦合关系,使程序更容易扩展。比如在上例中,新增加一种类型汽车的销售,只需要让新定义的类继承 Car 类并实现它的所有方法,而无需对原有代码做任何修改,CarShop 类的 sellCar(Car car) 方法就可以处理新的车型了。

 

以上是关于java-多态的主要内容,如果未能解决你的问题,请参考以下文章

java中多态是啥意思?

java中的多态

java实现多态有几种方式?分别是啥?

java多态怎么解释?

java中多态是啥意思?

多态分为哪两中