java多态之方法调用

分为四种情况:
1.第一种情况:父类中有,而子类中没有的方法
2.第二种情况:父类中没有,而子类中有的方法
3.第三种情况:父类中有,子类中也有的方法
4.第四种情况:父类和子类都有,但都是静态方法
代码举例分析:
父类:SuperClass
子类:SubClass
方法:父类中:doWork1()doWork()static doWork3()
          子类中:doWork2()doWork()static doWork3()

    public static void main(String[] args) {
        SuperClass a=new subClass();

        //第一种情况:父类中有,而子类中没有的方法
        a.doWork1();//输出:SuperClass.doWork1,调用了父类中存在的方法

        //第二种情况:父类中没有,而子类中有的方法
        //a.doWork2();//编译错误,因为编译的时创建的是编译类型,也就是SuperClass类型,
                    //而该类中没有doWork2()方法,会报错

        //第三种情况:父类中有,子类中也有的方法
        a.doWork();//输出:subClass.doWork,体现了多态的特性,调用了子类特定的方法(对象的运行类型)

        //第四种情况:父类和子类都有,但都是静态方法
        a.doWork3();//输出:SuperClass.doWork
        /*
         * 分析:静态方法和对象没有关系,访问时用的类名调用(SuperClass.doWork()),也就是用的时编译类型,即父类中的方法.
         *       这种情况称为隐藏,而不是覆盖。只有与对象有关的才称为覆盖。
         */
    }
}
class SuperClass{
    public void doWork1(){//只在父类
        System.out.println("SuperClass.doWork1");
    }
    public void doWork(){//子类父类都有
        System.out.println("SuperClass.doWork");
    }
    public static void doWork3(){//子父类都有的static方法
        System.out.println("SuperClass.doWork");
    }
}
class subClass extends SuperClass{
    public void doWork2(){//只在子类
        System.out.println("subClass.doWork2");
    }
    public void doWork(){//子类父类都有
        System.out.println("subClass.doWork");
    }
    public static void doWork3(){//子父类都有的static方法
        System.out.println("subClass.doWork");
    }
posted @ 2017-03-02 14:24  SEC.VIP_网络安全服务  阅读(106)  评论(0编辑  收藏  举报