重写
在子类中创建一个与父类相同名,返回值类型相同,方法相同,只是方法体中的实现不同,以实现不同与父类的功能。
alt + insert : override
重写的意义
假如父类是动物,有个方法叫动物叫, 但是子类是狗,使用父类的动物叫就不能表现狗的特征,就需要重写为汪汪叫。子类根据自己需要改写父类的方法。
静态方法和非静态的方法差别很大!
所以正常情况下不要加static
- 静态方法: 方法的调用只和左边,定义的数据类型有关
public class A extends B
{
//override 重写
public static void text (){
System.out.println("A>哈哈大笑");
}
//重写:都是方法的重写,和属性无关
public class B
{
//我们使用static 两边都要使用static
public static void test(){
System.out.println("B>哈哈大笑");
}
import com.oop.Demo02.A;
import com.oop.Demo02.B;
public class Application
{
public static void main (String[] args){
A a = new A();
a.text();//A类的静态方法
//向上转型
/*
父类与子类都加static时各种输出各自的方法
一个A>哈哈大笑,一个B>哈哈大笑
取消static后 子类就重新了父类的方法只输出A>哈哈大笑
*/
//父类的引用指向了子类
B b = new A();//子类重写了父类的方法
b.test();//B类的静态方法
}
- 非静态方法
public void text (){
System.out.println("A>哈哈大笑");
}
public void test(){
System.out.println("B>哈哈大笑");
}
总结
1.重写要有继承关系,子类重新父类的方法,比如有血缘关系,但是儿子可以有基因突变。
1.方法名必须相同
2.参数列表必须相同
3.修饰符 :范围可以扩大不能缩小
public > protected >default > private,
重写我们一般都是使用public。
4.抛出的异常:范围,可以被缩小,但是不能扩大: ClassNotFoundException --> Exception(大)
重写:子类的方法必须与父类相同:方法体不同。