方法重写

方法重写

  • 重写都是方法的重写,与属性无关

    父类的引用可以指向子类,就是new一个子类的对象数据类型可以写为父类,new子类是可以指向父类的

    重写的快捷键:Alt+insert

    对静态方法调用的时候,调用的方法只和定义的参数类型有关,但对非静态方法调用的时候,调用的方法都是new了的对象的方法

  • 静态方法和非静态方法的区别很大,不要随意去写静态方法

    重写是对非静态方法的,没有静态方法的重写(目前死记)

  • 子类重写了父类的方法,父类原来的那个方法就不能被调用了

注意:

  1. 重写需要有继承关系,子类重写父类的方法
  2. 方法名必须相同
  3. 参数列表必须相同
  4. 修饰符:范围可以扩大但不能缩小 public>protected>default>private
  5. 抛出的异常:范围可以缩小,但不能扩大:ClassNotFoundException -->Exception(大)
  6. 子类的方法和父类必须一致,但方法体不同

为什么要重写:

  1. 父类的功能子类不一定需要,或不一定满足
  2. 快捷键:Alt+insert:override

理解:

静态方法属于静态绑定,在编译阶段已经确定函数名和地址,静态方法当然是可以被继承的,但是却不能被重写,为什么那? 因为重写的意思是重新定义父类的虚函数,但是虚函数是动态绑定的,而静态方法是静态绑定的,所以静态函数必然不能是虚函数,也就不存在所说的重写了.你在子类中重新写一个同名的函数,覆盖了父类的同名函数,在使用子类指针进行调用的时候,调用的就是子类的这个静态方法

例如:

//父类
public class b {
    public void test(){
        System.out.println("b");
    }
}
//子类
public class a extends b{
    @Override //注解:有功能的注释
    public void test() {
        System.out.println("a");
    }
}
//执行类
public class zhixing {
    public static void main(String[] args) {
        a a = new a();
        a.test();//输出的就是a了,因为子类重写了父类,就相当于重新改写了父类,重写后就掉不到父类的那个方法了
    }
}

posted on   汪汪程序员  阅读(150)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示