zoukankan      html  css  js  c++  java
  • 多态的总结

    多态的表现形式
    * 1. 必须要有继承关系, 一般会伴随着方法重写.
    * 2. 父类的引用指向子类的对象.
    * 格式:
    * 父类类型(抽象类) 变量名 = new 子类类型();
    * 接口 接口名 = new 实现类();
    *
    * 使用:
    * 父类的引用.方法名();
    * 编译的时候看父类, 运行的时候看子类;(编译看左边, 运行看右边.)
    * 如果父类没有就编译报错
    如:

    Animal ani2 = new Cat();
    ani2.eat();// 猫吃鱼(因为父类有eat的方法,所以可以直接.eat;但是如果父类没有catchMouse的方法,虽然能编译成功,但是运行时还是会出错.)
    
    //ani2.catchMouse();// 因为编译的时候看左边Animal,如果没有该方法就报错了.
    

      

    * 多态的四种使用形式:
    * 1. 类(抽象类)作为方法的参数传递, 传递的是该类的子类对象
    * 2. 类(抽象类)作为方法的返回值, 返回的是该类的子类对象
    * 3. 接口作为方法的参数, 传递的是实现类对象
    * 4. 接口作为方法的返回值, 返回的是实现类对象.

    * 多态的好处:
    * 1.类可以作为方法的参数进行传递,无限扩展子类

    如:

    //	public static void weiShi(Cat cat){// Cat cat = new Cat()
    //	cat.eat();
    //	}
    //	
    //	public static void weiShi(Dog dog){
    //	dog.eat();
    //	}
    
    // 使用多态的方式对上述代码进行优化, 参数类型写成父类类型
    // 父类的引用作为方法的参数
    // 这个方法不需要做任何改变,Animal可以无限扩展子类.
    public static void weiShi(Animal ani) {// Animal ani = new Dog()
    ani.eat();
    }
    
    public static void main(String[] args) {
    
    weiShi(new Cat());
    weiShi(new Dog());
    }
    

      


    * 2.类可以作为方法的返回值.
    如:

    /*
    * 自动出售动物的机器
    */
    //	public static Cat getAnimal1(){
    //	return new Cat();
    //	}
    //	
    //	public static Dog getAnimal2(){
    //	return new Dog();
    //	}
    
    // 将上面的代码进行优化
    // Animal ani = new Cat();
    public static Animal getAnimal(int select){
    if(select == 1){
    return new Cat();
    }else{
    return new Dog();
    }
    }
    
    public static void main(String[] args) {
    Animal ani = getAnimal(1);
    ani = getAnimal(2);
    ani.eat();
    }	
    

      


    * 3.接口作为方法的参数: 传递的是接口的实现类对象

    //1.接口作为方法的参数传递
    public static void zhaoPin(SmokerInter si){
    
    si.smoke();
    //si.study();
    
    // 调用特有方法
    if(si instanceof Student){
    Student stu = (Student)si;
    stu.study();
    }
    
    if(si instanceof Worker){
    Worker work = (Worker)si;
    work.work();
    }
    
    if(si instanceof Pig){
    Pig pig = (Pig)si;
    pig.gongDi();
    }
    
    System.out.println("=========");
    }
    

      


    * 4.接口作为方法的返回值: 返回的是接口的实现类对象

    // 模拟驾校培训开车的学生
    public static DriverInter getDriver(){
    
    //return new Student();
    //return new Pig();
    return new SmallPig();
    }
    
    多态的向上转型和向下转型(向下转型的前提必须是先向上转型)	
    Plane p = new Battleplane();
    System.out.println("===向上转型");
    p.fly();
    if(p instanceof Battleplane){// 如果p是Battleplane的对象返回true, 否则返回false
    
    Battleplane ba1 = (Battleplane) p;
    System.out.println("===向下转型");
    ba1.fire();
    ba1.fly();
    }
    

      

    人生就像一场路途,尝遍酸甜苦辣,方知人生苦甜.
  • 相关阅读:
    Android开发人员不得不收集的代码
    Hadoop HBase概念学习系列之HBase的Shell(步骤非常清晰)(二十四)
    HBase的集群搭建(1、3、5节点都适用)
    Hadoop HBase概念学习系列之HBase里的存储数据流程(二十三)
    Hadoop HBase概念学习系列之HBase里的Client(二十二)
    Hadoop HBase概念学习系列之HBase里的Zookeeper(二十一)
    Hadoop HBase概念学习系列之HFile(二十)
    Hadoop HBase概念学习系列之HBase里的HStore(十九)
    Hadoop Hive概念学习系列之Hive里的2维坐标系统(第一步定位行键 -> 第二步定位字段)(二十三)
    Hadoop HBase概念学习系列之HBase里的4维坐标系统(第一步定位行键 -> 第二步定位列簇 -> 第三步定位列修饰符 -> 第四步定位时间戳)(十八)
  • 原文地址:https://www.cnblogs.com/zennon/p/8127929.html
Copyright © 2011-2022 走看看