方法重写
父类的引用可以指向子类
public class B{
public static void test()
{
sout("B.test")
}
}
public class A extends B{
public static void test()
{
sout("A.test")
}
}
main里
A a = new A();
B b = new A();
a.test()!=b.test()
一个是输出的a的test,一个是b的
静态方法static 的调用只和左边有关
下面是非静态
public class B{
public void test()
{
sout("B.test")
}
}
public class A extends B{
@Override
public void test()
{
sout("A.test")
}
}
main里
A a = new A();
B b = new A();
a.test()==b.test()
都是输出的a的test
(这里用了方法重写,子类重写了父类的方法)
所以非静态方法跟静态方法区别很大
重写一定是非静态方法
//重写一定是public
/*
1.重写要有继承关系,子类是重写父类的方法而不是属性或其他
2.重写方法名必须相同
3.参数列表必须相同
4.修饰符:范围可以扩大但不能缩小: public>Protect>Default>private(大于关系)
5.抛出的异常:范围可以被缩小,但不能扩大
*/
一句话:子类的方法和父类必须一致,方法体不同
为什么需要重写
父类的功能子类不一定需要,或者不一定满足
重写方法
写上父类->子类继承父类->父类写上方法(动态)->在子类里按Alt+Insert
找到override,点击然后选择你需要重写的类
即可