经常听到两种话:1.覆盖=重写。2.静态方法可以覆盖但不能重写吗,这两句话听起来挺矛盾的是不是,废话不多说直接上图
package com.wangshili;
public class Main {
public static void main(String[] args) {
Father f =new Child();//创建子类对象,父类引用
f.print();//调用父类方法
((Child)f).print();//向下转型,调用子类方法
while(true);
}
}
/*
* 重写有多态,调用方法时看对象
*/
class Father{
public void print(){
System.out.println ("这是父类");
}
}
class Child extends Father{
public void print(){
System.out.println ("这是子类");
}
}
package com.wangshili;
public class Test {
public static void main(String[] args) {
Father f =new Child();//创建子类对象,父类引用
f.print();//调用父类方法
((Child)f).print();//向下转型,调用子类方法
while(true);
}
}
/*
* 覆盖没多态,调用方法时看引用类型(静态属于类)
*/
class Father{
public static void print(){
System.out.println ("这是父类");
}
}
class Child extends Father{
public static void print(){
System.out.println ("这是子类");
}
}
认真读完上面两份代码,你应该能发现区别了,我总结下:
1.非静态方法,覆盖=重写,有多态
2.静态方法,是不能重写的,比如你添加@overwrite直接就报错了,我们知道静态属于类,通过类名就可以直接调用该方法,所以这里也是一样,只看引用类型,跟创建对象类型无关。
若觉得有误,可以留言。