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; }
blockDemo2()
constructor
还请注意,您可以将static
关键字添加到初始化块中,在这种情况下,它会在加载类时执行一次。