关于java继承中的super和static问题。关于重写的注意事项
1.java 继承中的static变量:假如A为父类,有as变量static int as=50;,然后类B继承类A,并且改写类B的构造函数,内容是改变as的值即 B(){A.as=20;},最后一个类C继承类B。最后测试类C中继承的as的值是50还是20。
//类Aclass
package proj1;
public class Aclass {
static int as=50;
}
//类Bclass
package proj1;
public class Bclass extends Aclass{
Bclass(){
Aclass.as=20;
}
}
//类Cclass
package proj1;
public class Cclass extends Bclass {
}
//主函数
package proj1;
public class main {
public static void main(String[] args) {
System.out.println(Cclass.as);
Bclass b=new Bclass();
System.out.println(Cclass.as);
}
}
最后运行的结果是:所以static类型的变量一直存在于程序运行结束之间,任何方法修改他都会造成值得改变,static类型的变量是共享的静态变量。
2.类A为父类,有方法体public void getname(){System.out.print(“A”);}
- 类B为A的子类,修改方法体public void getname(){System.out.print(“B”);}
- 类C有方法体public void getname(){super.getname();}
package proj1;
public class Aclass {
public void getname(){
System.out.print("A");
}
}
package proj1;
public class Bclass extends Aclass{
public void getname(){
System.out.print("B");
}
}
package proj1;
public class Cclass extends Bclass {
public void getname(){
super.getname();
}
}
package proj1;
public class main {
public static void main(String[] args) {
Cclass c=new Cclass();
c.getname();
}
}
运行结果:所以多重继承super调用的方法为离这个类最近的父类的方法
3.重写:在Java程序中重写方法时,需要注意如下两点。
(1)当子类覆盖了父类方法后,子类对象将无法访问父类中被覆盖的方法,但还以在子类方法中调用父类中被覆盖方法。如果需要在子类方法中调用父类中被覆盖的方法,可以使用super(被覆 盖的是实例方法)或者父类类名(被覆盖方法是类方法)作为调用者来调用父类中被覆盖方法
(2)如果父类方法具有私有(private)访问权限,则该方法对其子类是隐藏的,因此其子类无法访问该方法,也就是说无法重写该方法。如果在子类中定义了一个与父类private方法具相同名字的方法,相同形参列表,相同返回值类型的方法,依旧还不是重写,只是在子类中重新定义了一个新方法。