浅谈Java多态
多态
多态存在的三个必要条件
比如 Parent p = new Child(); ? 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。 重载(Overload)与重写(Override)多态中重写的基本规则
重载重载的意义时同一个类里,两个方法的名称相同,但参数不同。 所以,重载和多态没有半毛钱关系! 重载可以有同一方法的多个不同参数版本以便调用。比如某个方法需要int,调用方就需要把double转成int然后才能调用。如果有个重载版的方法取用double参数,这样调用就简单多了。 因为重载方法不需要满足定义在父类的多态合约,所以扩展起来比较方便。 重载最常用的地方就是构造器的重载。 原则
public class Overloading { public int test(){ System.out.println("test1"); return 1; } public void test(int a){ System.out.println("test2"); } //以下两个参数类型顺序不同 public String test(int a,String s){ System.out.println("test3"); return "returntest3"; } public String test(String s,int a){ System.out.println("test4"); return "returntest4"; } public static void main(String[] args){ Overloading o = new Overloading(); System.out.println(o.test()); o.test(1); System.out.println(o.test(1,"test3")); System.out.println(o.test("test4",1)); } } 重写与重载之间的区别
总结方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
附一张网图 多态成员访问的特点Parent p = new Child(); 成员变量 编译看左边(父类),运行看左边(父类);无论如何都是访问父类的成员变量。 成员方法 编译看左边(父类),运行看右边(子类),动态绑定。 Static方法 编译看左边(父类),运行看左边(父类)。 只有非静态的成员方法,编译看左边,运行看右边。 这样,我们也可以得出多态的局限: 不能使用子类特有的成员属性和子类特有的成员方法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |