如果子类引用指向子类对象,那么用的是子类的方法与变量,当然由于继承父类,所以父类的非私有的变量与方法也能调用。如果说父类变量名与子类一样,那就被覆盖了,方法名一样,可能重载也可能覆盖。
如果父类引用指向子类对象,即多态。对于非静态方法,编译看左边,运行看右边,即编译时看父类中有没有那些方法,若没有编译失败,运行时看子类对象,有没有那些方法,实际调用的是子类方法;对于静态方法,编译运行都看左边,即编译运行都看父类方法,而不是被子类覆盖的方法,因为静态,可以类名调用,所以父类不管指的是谁,调的都是父类;对于成员变量,编译运行都看左边,即编译时看父类有没有那变量,运行时也调用父类的变量。
静态代码块是类一加载就执行,是给类初始化,构造代码块是创建对象时给对象初始化 |