关于多态属性的调用问题

  • class Fu{
  • int num=4;
  • void show(){
  • System.out.println("showFu");
  • }
  • }
  • class Zi extends Fu{
  • int num = 5;
  • void show(){
  • System.out.println("showZi");
  • }
  • }
  • public class Test1{
  • public static void main(String[] args){
  • Fu f=new Zi();
  • Zi z=new Zi();
  •     System.out.println(f.num);     *请问这个为什么打出来是4
    
  •     System.out.println(z.num);
    
  •     f.show();
    
  •     z.show();
    
  • }
    
  • }

  • *

Fu f=new Zi();
因为f是Fu类型,所以看不到Z的成员。
如果是
System.out.println(((Z)f).num);
则输出5

成员变量没有“覆盖”一说。

昨晚下班之后,以前的大学同学,叫我开黑去了,hhhhhhh~,没注意你的消息,原来让我来回答这个问题233333

在java中,通常属性是没有多态这个概念的,不仅是成员变量,还有静态方法。
意思就是,如果你这个num,是通过静态方法来获取的话,那么依旧是父类的静态方法来为你提供返回值,而不是子类

除了成员变量和静态方法以外,普通的方法,就是执行子类的方法了,如果你不想要父类的成员变量,想要子类的,那么可以通过子类的get方法来获取,前提是你要写了get、set方法23333
通过f.getNum()来获取子类的成员变量的值

希望能够帮助你理解~