Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中重写变量_Java_Overriding - Fatal编程技术网

在java中重写变量

在java中重写变量,java,overriding,Java,Overriding,我得到了输出B3。为什么它不把b13作为输出。谁能解释一下。在Foo类中声明public int a=8而不是Bar类它应该工作。。。打印B3 但是我想您讨论的是Java认证考试中包含的一个问题,因此您必须更正Foo类的代码,添加public int a=3 不能在Java中重写变量,但在超类中声明为public(或protected)也可以在所有继承的类中使用它 在这种情况下,右边的输出是B13,因为在测试类中,您使用Bar对象作为Foo对象,因此a的值是3而不是8,假设类Foo声明如下 pu

我得到了输出B3。为什么它不把b13作为输出。谁能解释一下。

Foo
类中声明
public int a=8
而不是
Bar
类它应该工作。。。打印B3

但是我想您讨论的是Java认证考试中包含的一个问题,因此您必须更正
Foo
类的代码,添加
public int a=3

不能在Java中重写变量,但在超类中声明为
public
(或
protected
)也可以在所有继承的类中使用它


在这种情况下,右边的输出是B13,因为在测试类中,您使用
Bar
对象作为
Foo
对象,因此
a
的值是3而不是8,假设类Foo声明如下

public class Test {
    public static void main(String args[]){
        Foo f = new Bar(); 
        f.addFive();
        System.out.println(f.a);
    }
 }
  • 变量没有覆盖的概念。他们只是蒙面而已
  • 它打印3是因为,当您使用超类引用访问变量时,它只访问在超类中声明的变量记住,超类对子类一无所知。
  • 您没有定义“a”变量,因此此示例甚至不编译

    正确代码:

    class Foo {
            public void addFive() { 
                a += 5; System.out.print("f "); 
            }
    }
    

    请参见链接

    我假设您是想在类
    Foo
    中声明一个整数字段
    a

    正如其他人所指出的,你的问题的答案与“覆盖”和“隐藏”的概念有关。另一种解释方法是,对于成员变量,没有“动态分派”这样的东西。这意味着,如果您访问某个对象的成员,系统将在运行时通过查看类层次结构来检查您所指的成员

    因此,在运行时调用方法
    f.addFive
    时,系统将看到您的对象实际上是一个
    Bar
    ,而不是
    Foo
    ,因此使用您在
    Bar
    类中定义的
    addFive
    函数

    成员变量不会发生这种情况:您在print语句中访问
    f.a
    ,在编译时,您决定在那里访问class
    Foo
    中声明的字段
    a
    ,因此,这就是运行时将发生的情况


    现在,没有成员变量访问的动态分派的原因是性能:每次您只想给成员变量添加一些值时,都需要花费很高的代价来遍历整个“查看这到底是什么对象”逻辑。

    请在代码中使用适当的间距。Java中无法重写变量。您的代码未编译,因为在类
    Foo
    中未定义变量
    a
    。请更正您的代码。此代码甚至不可编译。编写时,您的代码不可编译。Foo中不存在a。@prerna我想您正在学习Java认证:)如果是,那么您发布的代码中存在错误。你忘了把
    public int a=3
    Foo
    类中。
    public class Test {
        public static void main(String args[]){
            Foo f = new Bar(); 
            f.addFive();
            System.out.println(f.a);
        }
     }
    
    class Foo 
    {
    
        public int a = 3;
    
        public void addFive()
        { 
            a += 5; 
            System.out.print("f ");
        }
    }
    
    class Foo {
            public void addFive() { 
                a += 5; System.out.print("f "); 
            }
    }
    
    class Foo {
    
           public int a;
    
           public void addFive() { 
              a += 5; System.out.print("f "); 
           }
    }