为什么我们不能在 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();
}
}

我得到编译时错误在类Demo2使用super。age(或)创建Demo1的对象并访问age变量也会给我带来编译时错误,如未识别的令牌。

我试图修改Demo2类中的方法或构造函数中的Demo1继承的年龄变量,它正在工作,但是,我无法理解我们不能访问Demo2类中的方法或构造函数

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
}

初始化块在层次结构中相应类的构造函数之前执行,即在上面的例子中顺序是:

  • Demo1()constructor
  • { age=19; }block
  • Demo2()constructor

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

相关内容

  • 没有找到相关文章

最新更新