疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

父类实例的super引用2—[疯狂java讲义]


 

         方法重载和方法重写在英语中分别是overload和override,经常看到有初学者或一些低水平的公司喜欢询问重载和重写的区别?其实把重载和重写放在一起比较本身没有太大的意义,因为重载主要发生在同一个类的多个同名方法之间,而重写发生在子类和父类的同名方法之间。它们之间的联系很少,除了二者都是发生在方法之间,并要求方法名相同之外,没有太大的相似之处。当然,父类方法和子类方法之间也可能发生重载,因为子类会获得父类方法,如果子类定义了一个父类方法有相同方法名,但参数列表不同的方法,就会形成父类方法和子类方法的重载。
 
        如果子类定义了和父类同名的属性,也会发生子类属性覆盖父类属性的情形。正常情况下,子类里定义的方法、子类属性直接访问该属性,都会访问到覆盖属性,无法访问父类被覆盖的属性。但在子类定义的实例方法中可以通过super来访问父类被覆盖的属性。
 
        如果被覆盖的是类属性,在子类的方法中则可以通过父类名作为调用者来访问被覆盖的类属性。
 
        如果子类里没有包含和父类同名的属性,则子类将可以继承到父类属性。如果在子类实例方法中访问该属性时,则无须显示使用super或父类名作为调用者。因此,如果我们在某个方法中访问名为a的属性,但没有显示指定调用者,系统查找a的顺序为:
 
        1、查找该方法中是否有名为a的局部变量
 
        2、查找当前类中是否包含名为a的属性
 
        3、查找a的直接父类中是否包含名为a的属性,依次上溯a的父类,知道java.lang.Object类,如果最终不能找到名为a的属性,则系统出现编译错误。(摘自[疯狂java讲义])