繁体   English   中英

为什么我们不能在 java 的子 class 的方法之外访问 class 内部的父实例变量 class?

[英]why can't we access parent class instance variables inside the class outside the method in child class in java?

class Demo1{
  int age=12;
  public void display(){
   System.out.println("InDemo1");
  }
}

class Demo2 extends Demo1{
    age=19;   **//------------------->getting error here**
    @Override
    public void display(){
        
        System.out.println("InDemo2"+age);
    }
    public Demo2(){
      System.out.println("Inside the constructor");
    }
}


public class SuperKeyword {
    public static void main(String[] args){
        Demo2 demo2=new Demo2();
        demo2.display();
    }
}

通过使用 super.age(或)创建 Demo1 的 object 并访问 age 变量,我在 class Demo2 中遇到编译时错误,这也给我编译时错误,如未识别的令牌。

我试图在 Demo2 class 的方法或构造函数中修改从 Demo1 继承的年龄变量,它正在工作但是,我不明白我们不能在 demo2 class 的方法或构造函数之外访问

public class SuperKeyword {
    public static void main(String[] args){
        Demo2 demo2=new Demo2();
        demo2.display();
    }
}
class Demo1{
    int age=12;
    public void display(){
        System.out.println("InDemo1");
    }
}

class Demo2 extends Demo1{
    public void display(){
        super.age=19;  //---------->not getting error
        System.out.println("InDemo2"+age);
    }

那个age=19; 在任何方法或初始化程序块之外,因此需要像int age=12; . 请注意,在变量声明期间,您可以定义一个初始值,但您不必这样做,即int age; 也可以。

你想要做的是在初始化实例时设置一个新值,这是初始化块的用途:

class Demo2 extends Demo1 {
  //this is an instance initializer block      
  {
    age=19;
  }

  //rest of your code
}

初始化块在层次结构中相应 class 的构造函数之前执行,即在上述情况下,顺序为:

  • Demo1()构造函数
  • { age=19; } { age=19; }
  • Demo2()构造函数

另请注意,您可以将static关键字添加到初始化程序块,在这种情况下,它会在加载 class 时执行一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM