![](/img/trans.png)
[英]Why java doesn't allow to make an instance method of parent class as more restrictive in child 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.