java 中static方法中有关继承的问题总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fanfanzk1314/article/details/79728690
public class StaticTest {  
    public static void main(String[] args) {  
        A a = new B();  
        a.f1();  
        a.f2();  
    }  
}  
  
class A {  
  
    public static void f1() {  
        System.out.println("hello! A");  
    }  
  
    public void f2() {  
        System.out.println("hello ! A");  
    }  
      
}  
  
class B extends A {  
  
    public static void f1() {  
        System.out.println("hello! B");  
    }  
  
    public void f2() {  
        System.out.println("hello! B");  
    }  
      
}  


运行结果是:

 hello!A

 hello!B

分析原因是:这里是有关覆盖和隐藏的问题

override即覆盖,这是对实例方法(instance   method)而言的;子类与父类中形构相同的方法会override父类中的那个方法。“override覆盖”的前提是实例方法,只有实例方法在继承时才会出现override情况

hide  即隐藏,这是对类方法(class   method)即static方法而言的。如果子类中定义了静态方法,则它会隐藏父类中形构相同的所有方法,但如果隐藏了父类中的实例方法,则会编译报错。其中需要注意的是child隐藏了parent的变量和方法,那么,child实例就不能访问parent中被隐藏的变量或者方法,但是,将child实例向上提升转换成parent,可以访问parent中被隐藏的变量或者方法了。修饰的方法不能实现多态,当然不需要被子类覆盖了(子类覆盖父类方法是为了实现多态)



猜你喜欢

转载自blog.csdn.net/fanfanzk1314/article/details/79728690