zoukankan      html  css  js  c++  java
  • 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) 方法就可以处理新的车型了。

  • 相关阅读:
    2017.2.12【初中部 GDKOI】模拟赛B组 T2:宿敌
    离散化介绍
    2017.2.12【初中部 GDKOI】模拟赛B组 T1:圆盘染色
    2017.2.12【初中部 GDKOI】模拟赛B组
    2017.2.11【初中部 GDKOI】模拟赛B组 T4:摧毁巴士站
    2017.2.11【初中部 GDKOI】模拟赛B组
    2017.2.11【初中部 GDKOI】模拟赛B组 T3:空间航行
    2017.2.11【初中部 GDKOI】模拟赛B组 T2:软件公司
    2017.2.11【初中部GDKOI】模拟赛B组 T1:最小比例
    自出题,写题解《招募士兵》
  • 原文地址:https://www.cnblogs.com/sacai/p/11122853.html
Copyright © 2011-2022 走看看