11 方法重写
方法重写
package com.zhan.base05Oop.base05Oop03;
public class Test11 {
// 方法重写
// 重写都是方法的重写,和属性无关
// alt + insert(Fn) :快捷键生成方法的重写
/* 重写 vs 重载
重写:需要有继承关系,只能子类重写父类的方法,参数列表必须相同
重载:不需要继承关系,对本类的方法进行操作,参数列表必须不同
重写的特点
1. 方法名必须相同
2. 参数列表必须相同
3. 修饰符,可以扩大但不能缩小。 从大到小:public->protected->default->private
4. 抛出的异常: 范围,可以缩小但不能扩大
重写,子类和父类的方法名和参数列表必须要相同,但方法体要不同(不然就没意义了)
为什么需要重写:
1. 父类方法的功能,子类不一定需要或者不一定满足
*/
public static void main(String[] args) {
/*
即b是A new出来的对象,因此调用了A的方法
因为静态方法是类的方法,而非静态是对象的方法
有static时,b调用了B类的方法,因为b是用b类定义的
没有static时,b调用的是对象的方法,而b是用A类new的
*/
/* 静态方法和非静态方法有很大的不同!
静态方法:定义的是什么类(左边的)就调用什么类的静态方法(静态方法是类的方法,而非静态是对象的方法):不是重写
非静态非私有的方法 才能重写
*/
// 静态的方法
A a=new A();
a.test();
// 父类的引用指向子类
B b=new A();
b.test();
// 非静态的方法
a.test1();
b.test1();
}
}
class A extends B{
public static void test(){
System.out.println("A=>test");
}
@Override // 注解:有功能的注释
// alt + insert(Fn) :快捷键生成方法的重写
public void test1() {
// super.test(); 默认的重写是直接调用父类的方法
System.out.println("A=>test1"); // 自己可以手动进行想要的重写
}
}
class B{
public static void test(){
System.out.println("B=>test");
}
public void test1(){
System.out.println("B=>test1");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?