Java面向对象系列(9)- 方法重写

为什么需要重写?

父类的功能,子类不一定需要,或者不一定满足

 

场景一

  • 重写都是方法的重写,和属性无关
  • 父类的引用指向了子类
  • 用B类新建了A类的对象,把A赋值给了B,这时候B是A,A又继承了B类,向上转型。所以调用B类方法的时候,也就是B=>test
  • 定义的是static,new一个对象时,左边引用的类是哪个就用的哪个类下面的方法
package oop.demo05;

//重写都是方法的重写,和属性无关
public class B {
    public static void test(){
        System.out.println("B=>test()");
    }
}
package oop.demo05;

//继承
public class A extends B{
    public static void test(){
        System.out.println("A=>test()");
    }
}
package oop;

import oop.demo05.A;
import oop.demo05.B;

public class Application {
    public static void main(String[] args) {

        //可以调用哪些方法和左边的类有关,和右边的new关系不大
        A a = new A();
        a.test();//A

        //父类的引用指向了子类
        B b = new A();
        b.test();//B
    }
}

场景二

  • 重写只和非静态方法有关。只有非静态方法可以重写;并且私有private修饰重写不起来
  • 静态方法是类的方法,而非静态是对象的方法
  • 有static时,b调用了B类的方法,因为b是用b类定义的
  • 没有static时,b调用的是对象的方法,而b是用A类new的;即重写了父类的方法
  • 静态方法只能继承,不能重写

 

 

重写

需要有继承关系,子类重写的是父类的方法!!!属性不一样的那叫重载,重写与属性无关!!!

  • 方法名必须相同
  • 参数列表必须相同
  • 修饰符:范围可以扩大但不能缩小    public(公共的) > protected(受保护的)>default(默认的)>private(私有的)
  • 抛出的异常:范围,可以被缩小,但不能扩大  ClassNotFoundException --> Exception(大)

 

重写总结:

  • 子类的方法和父类必要一致;方法体不同!
  • 快捷键Alt+Insert选择override
  • 重写的方法,注解解@Override
posted @ 2021-09-21 23:26  葛老头  阅读(89)  评论(0)    收藏  举报