当前位置: 首页 > 知识库问答 >
问题:

重写Java中的成员变量(变量隐藏)

慎星纬
2023-03-14

我正在Java学习重写成员函数,并考虑过尝试重写成员变量

所以,我给类下了定义

public class A{
    public int intVal = 1;
    public void identifyClass()
    {
        System.out.println("I am class A");
    }
}

public class B extends A
{
    public int intVal = 2;
    public void identifyClass()
    {
        System.out.println("I am class B");
    }
}

public class mainClass
{
    public static void main(String [] args)
    {
        A a = new A();
        B b = new B();
        A aRef;
        aRef = a;
        System.out.println(aRef.intVal);
        aRef.identifyClass();
        aRef = b;
        System.out.println(aRef.intVal);
        aRef.identifyClass();
    }
}

输出为:

1
I am class A
1
I am class B

我不明白为什么当aRef设置为b时,intVal仍然是A类?

共有1个答案

阎知
2023-03-14

当您在子类中创建一个同名的变量时,这就叫做隐藏。得到的子类现在实际上将同时具有这两个属性。您可以使用super.var((superclass)this).var从超类中访问它。变量甚至不必是同一类型的;它们只是共享一个名称的两个变量,很像两个重载的方法

 类似资料:
  • 问题内容: 我正在研究JAVA中的重写成员函数,并考虑过尝试使用重写成员变量。 所以,我定义了类 输出为: 我不明白为什么当aRef设置为b时intVal仍然是A类? 问题答案: 当在子类中创建相同名称的变量时,这称为隐藏。现在,生成的子类实际上将同时具有这两个属性。你可以使用或从超类访问一个。变量甚至不必具有相同的类型。它们只是两个共享名称的变量,就像两个重载方法一样。

  •   - a - addr : rt_i2c_bus_device , rt_i2c_msg ai_addr : addrinfo ai_addrlen : addrinfo ai_canonname : addrinfo ai_family : addrinfo ai_flags : addrinfo ai_next : addrinfo ai_protocol : addrinfo ai_soc

  •   - y - y : rt_device_rect_info

  •   - x - x : rt_device_rect_info xfer : rt_spi_ops

  •   - w - waiting_list : rt_wqueue wakeup : rt_wqueue_node width : rt_device_graphic_info , rt_device_rect_info wktime : rt_alarm , rt_alarm_setup work_current : rt_workqueue work_data : rt_work work_fu

  •   - v - value : rt_mutex , rt_semaphore vstart_addr : rt_dlmodule