Day54 面向对象11:方法重写

面向对象11:方法重写(子类父类必须为非静态方法,

无 static)

!重点:先看笔记!

重写:需要有继承关系,是子类重写父类的方法!//重写只针对方法   不针对属性或其它的 
    1.方法名必须相同
    2.参数列表列表必须相同
    3.修饰符:范围可以扩大: public>Protected>Default>private
    4.抛出的异常:范围,可以被缩小,但不能扩大:ClassNotFoundException --> Exception(大)

重写:子类的方法(方法名、参数列表)和父类必须要一致;方法体(方法里面的各自内容)不同!

为什么需要重写:
       1.父类的功能,子类不一定需要,或者不一定满足!
       Alt + Insert 快捷键: override;

重写只跟非静态方法有关 且只能是子类重写父类的方法

重写的关键词也只能是public

!子类重写父类的方法过程

下面详细看下代码的过程:

1.A类和B类都是静态方法(有static时)

new的都是A 结果却不同

父类B 子类A

a.test();调用的是A的方法

b.test();调用的是B的方法 父类的引用指向了子类 B b = new A();

2.A类和B类都同时去掉static 变成非静态方法

把A类的原先方法删除

Alt + Insert 快捷键 选择Override Methods 方法重写

自动跳出下图的方法

自动填充的方法中

super.test(); --------------------> 默认调用的是父类的test

把这行代码删掉 自行修改替换成 System.out.println("A=>test()");

再运行程序,看下图:

发现结果跟有static关键词的静态方法的结果 大不相同

**由于子类(A类)重写了父类(B类)的方法 **

导致b.test();调用的是A类的方法

!注意点:

重写只跟非静态方法有关 B b = new A(); 子类重写了父类的方法

重写的关键词也只能是public

所以静态方法 和非静态方法的区别很大

B(父类)

package com.oop.demo06;

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

    public  void test(){  //把关键词static去掉
        System.out.println("B=>test()");
    }
}

A(子类)

package com.oop.demo06;

//A类继承B类
public class A extends B{

//Alt + Insert快捷键

    //Override 重写
    @Override//注解:有功能的注释!
    public void test() {
        System.out.println("A=>test()");
    }
}

Application

package com.oop.demo06;

public class Application {

    //静态方法(有static)和非静态的方法区别很大!
    //静态方法: //方法的调用只和左边,定义的数据类型有关

    //非静态方法:重写
    public static void main(String[] args) {
        
        A a = new A();
        a.test();//A

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

Application的结果:

A=>test()
A=>test()
posted @   白小帆  阅读(10)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示