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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南