方法重写
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");
}
}
标签:11,test1,静态方法,重写,test,方法,public
From: https://www.cnblogs.com/zhanjianhai/p/17104962.html