package day34; public class Father { String name; int age; public void 输出(){ System.out.println("father"); } }
package day34; public class Son extends Father{ @Override public void 输出() { System.out.println("son"); } }
package day34; public class Application { public static void main(String[] args) { Son son=new Son(); Father father=new Son(); son.输出(); father.输出(); } }
输出的结果为两个son 是因为子类重写了父类的方法
Father father=new Son(); 父类的引用指向子类
@Override//表明是重写
重写: 需要有继承关系,子类重写父类的方法
-
方法名必须相同
-
参数列表必须相同
-
修饰符子类重写的方法的访问范围要 >= 父类方法的访问范围;
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
---|---|---|---|---|
private | 可以 | 不可以 | 不可以 | 不可以 |
默认 | 可以 | 可以 | 不可以 | 不可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
public | 可以 | 可以 | 可以 | 可以 |
注意 重写只和非静态方法有关
例如
当写静态方法的时候出现错误 删除 @Override后
关于静态方法如下代码
package day34; public class Father { String name; int age; public static void 输出(){ System.out.println("father"); } }
package day34; public class Son extends Father{ public static void 输出() { System.out.println("son"); } }
package day34; public class Application { public static void main(String[] args) { Son son=new Son(); Father father=new Son(); son.输出(); father.输出(); } }
输出的结果为
我们发现当方法为非静态方法的时候 Father father=new Son();只和左边有关
另外需要注意的是 idea的重写方法的快捷方式是 ALt+insert(有些电脑是Alt+insert+Fn)
然后点击下面的
或者直接ctrl+O 快速重写方法