简单易懂说明:父类子类方法覆盖,static 类型的方法是不能被覆盖的。
首先,static方法是可以继承的,父类中的static方法,子类也可以调用。
public class Son extends Father{
public void print(){
System.out.println("2");
}
public static void main(String[] args) {
Father son=new Son();
son.print();
}
}
class Father {
public void print() {
System.out.println("1");
}
}
我们使用的是public类型方法,这样父类和子类的方法名一样的时候,调用时子类的方法就会覆盖父类的。这段代码输出的结果会是“2”。
方法的覆盖需要满足:子类中的方法头和父类中的方法头完全相同,即:应该有完全相同的方法名、返回值类型和参数列表。在满足上述三个条件同时,还必须保证:子类重写父类的方法时,访问权限不能缩小。
public class Son extends Father{
static void print(){
System.out.println("2");
}
public static void main(String[] args) {
Father son=new Son();
son.print();
}
}
class Father {
static void print() {
System.out.println("1");
}
}
我们使用static类型方法,则输出的结果是“1“;我们调用的是father方法因为使用的是静态static类型方法,则不会被子类son所覆盖。
现在提个小问题,看代码分析一下结果是什么?为什么?(评论区看你们的理解能力,不可以用编译器编译作弊)
class Base{
int i=99;
public void amethod() {
System.out.println("Base.amethod()");
}
}
public class RType extends Base{
int i= -1;
public static void main(String args[]) {
// TODO Auto-generated method stub
Base b =new RType();
System.out.println(b.i);
b.amethod();
}
public void amethod() {
System.out.println("RType.amethod()");
}
}