zoukankan      html  css  js  c++  java
  • Java 多态

    可以理解为事物存在的多种体现形态。

    人:男人,女人
    动物:猫,狗。

    多态的体现

    • 父类的引用指向了自己的子类对象。
    • 父类的引用也可以接收自己的子类对象。

    多态的前提

    • 必须是类与类之间有关系。要么继承,要么实现。
    • 通常还有一个前提:存在覆盖。

    多态的好处与弊端

    • 多态的出现大大的提高程序的扩展性。
    • 只能使用父类的引用访问父类中的成员。
    abstract class Animal {
        abstract void eat();
    }
    
    class Cat extends Animal {
        public void eat() {
            System.out.println("吃鱼");
        }
    
        public void catchMouse() {
            System.out.println("抓老鼠");
        }
    }
    
    class Test {
        public static void main(String[] args) {
            Animal a = new Cat();//类型提升。 向上转型。
            a.eat();
            //如果想要调用猫的特有方法时,如何操作?
            //强制将父类的引用。转成子类类型。向下转型。
            Cat c = (Cat)a;
            c.catchMouse();
        }
    }
    

    运行结果:
    吃鱼
    抓老鼠

    多态特点

    在多态中成员函数的特点

    • 在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
    • 在运行时期:参阅对象所属的类中是否有调用的方法。
      简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。

    在多态中,成员变量的特点

    • 无论编译和运行,都参考左边(引用型变量所属的类)。

    在多态中,静态成员函数的特点:

    • 无论编译和运行,都参考做左边。
    class Fu {
        static int num = 5;
    
        void method1() {
            System.out.println("fu method_1");
        }
    
        void method2() {
            System.out.println("fu method_2");
        }
    
        static void method4() {
            System.out.println("fu method_4");
        }
    }
    
    class Zi extends Fu {
        static int num = 8;
    
        void method1() {
            System.out.println("zi method_1");
        }
    
        void method3() {
            System.out.println("zi method_3");
        }
    
        static void method4() {
            System.out.println("zi method_4");
        }
    }
    
    class DuoTaiDemo4 {
        public static void main(String[] args) {
            Fu f = new Zi();
            System.out.println(f.num);
            f.method2();
            f.method1();
        }
    }
    

    运行结果:
    5
    fu method_2
    zi method_1

  • 相关阅读:
    php数组的创建及操作
    继承的几种方式
    js对象的创建与原型总结
    对象的创建
    变量与内存
    js函数的几个特殊点
    正则表达式的几个简单验证
    数组排序sort()
    对象与数组
    js函数动态传参
  • 原文地址:https://www.cnblogs.com/hen-java/p/12601550.html
Copyright © 2011-2022 走看看