方法的重写

父类

package com.encapsulation.demo02;

// 重写都是方法的重写和属性无关
public class B {

    public void test() {
        System.out.println("B=>test()");
    }
}

子类

package com.encapsulation.demo02;

public class A extends B {

    // Override重写 要重新父类的方法必须那个类没有static修饰
    @Override // 注解:有功能的注释
    public void test() {
        System.out.println("A=>test()");
    }
}

调用

package com.encapsulation;

import com.encapsulation.demo02.A;
import com.encapsulation.demo02.B;

public class App {
    // 静态的方法和非静态的方法区别很大
    // 静态方法: 方法的调用只和左边,定义的数据类型有关

   //非静态:重写
    public static void main(String[] args) {

        // 方法的调用只和左边,定义的数据类型有关
        A a = new A();
        a.test(); // A

        // 父类的引用指向了子类 在有static修饰符的时候还是调用父类本身的test(), 反之就是子类重写了父类的test方法
        B b = new A(); // 子类重写了父类的方法
        b.test(); // B

    }
}

知识点

  1. static修饰的变量我们称之为静态变量,没有用static修饰的变量称之为实例变量
    1. 静态变量是随着类加载时被完成初始化的,它在内存中仅有一个,且JVM也只会为它分配一次内存,同时类所有的实例都共享静态变量,可以直接通过类名来访问它。
    2. 但是实例变量则不同,它是伴随着实例的,每创建一个实例就会产生一个实例变量,它与该实例同生共死。
    3. 所以我们一般在这两种情况下使用静态变量:对象之间共享数据、访问方便。
  2. static方法
    1. static修饰的方法我们称之为静态方法,我们通过类名对其进行直接调用。由于他在类加载的时候就存在了,它不依赖于任何实例,所以static方法必须实现,也就是说他不能是抽象方法abstract。
    2. Static方法是类中的一种特殊方法,我们只有在真正需要他们的时候才会将方法声明为static。如Math类的所有方法都是静态static的。
  3. static代码块
    1. 被static修饰的代码块,我们称之为静态代码块,静态代码块会随着类的加载一块执行,而且他可以随意放,可以存在于该了的任何地方。
  4. static局限性
    1. 它只能调用static变量。
    2. 它只能调用static方法。
    3. 不能以任何形式引用this、super。
    4. static变量在定义时必须要进行初始化,且初始化时间要早于非静态变量。

总结

  1. 需要有继承关系,子类重写父类的方法!
    1. 方法名必须相同
    2. 参数列表必须相同
    3. 修饰符:范围可以扩大 pubilc>Protected>Default>private
    4. 抛出的异常:范围可以被缩小,但不能扩大; calssNotFoundException --> Exception(大)
  2. 重写,子类的方法和父类必须要一致;方法体不同
  3. 为什么需要重写:
    1. 父类的功能子类不一定需要,或者不一定满足
    2. 快捷键 alt+insert : override;
posted @ 2021-06-29 10:30  橙子yuan  阅读(56)  评论(0)    收藏  举报