方法重写
-
main 方法
public class Application { public static void main(String[] args) { A a = new A(); //走的是 A 类静态方法 a.test(); B b = new A(); //走的是 B 类静态方法 b.test(); } } -
父类
Bpackage Oop.Demo_02; public class B { public static void test(){ System.out.println("B=>text"); } } -
子类
Apackage Oop.Demo_02; //重写都是方法的重写,和属性无关 public class A extends B{ public static void test(){ System.out.println("A=>text"); } }
-
方法的调用之和左边,也就是定义的数据类型有关
-
父类的引用指向子类
静态方法 和 非静态方法 有区别
-
main 方法
public class Application { public static void main(String[] args) { A a = new A(); a.test(); B b = new A(); b.test(); } } -
父类
Bpackage Oop.Demo_02; public class B { public void test(){ System.out.println("B=>text"); } } -
子类
Apackage Oop.Demo_02; //重写都是方法的重写,和属性无关 public class A extends B{ //Override 重写 @Override //注释,有功能的注释 public void test() { System.out.println("A=>test"); } } -
获得输出
A=>test A=>test
解释
有 statio 时为静态方法,没有 statio 时为非静态方法。静态方法是类的方法,非静态方法是对象的方法。因为以上示例中,没有 statio 所以定义的是类的方法。对象 b 是 A new 出来的,因此b调用的是A的方法。所以最后输出的会是 A=>test
总结
-
重写
-
需要有继承关系,子类重写父类的方法
-
方法名必须相同
-
参数列表列表必须相同
-
修饰符: 范围可以扩大但不能缩小:
public > Protected > Default > private -
抛出的异常: 翻译缩小但不能扩大:
-
-
子类的方法和父类必须一直。方法体不同!
-
-
为什么要重写?
- 父类的功能,子类不一定需要,或者不一定满足