一、方法的重写:
1.子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法重写(复写);
2.重写的格式:
1).返回值类型 方法名 ,形参列表:必须完全一致;
A."返回值类型"和"方法名"相同,"参数列表"不同:编译通过。类似于"重载",子类定义了一个自己的方法
B."方法名"和"参数列表"相同,"返回值类型"不同:编译错误。如果"方法名"和"形参列表"相同,要求"返回值类型"必须相同;
2).访问修饰符:
要求:
子类的方法所具有的访问修饰符必须跟父类的方法的访问修饰符相同,或更宽的访问修饰符;
public,protected,(默认),private(从宽到窄)
3、当子类需要父类的功能,而功能主体子类有自己特有内容时,
可以重写父类中的方法,
这样,即沿袭了父类的功能,又定义了子类特有的内容。
4、方法重写的注意事项
1.父类中私有方法不能被重写。
2.子类重写父类方法时,访问权限不能更低。必须是具有:相同,或更宽的访问权限;
3.父类静态方法,子类也必须通过静态方法进行重写。
4.父类被final修饰的方法不能被重写
5.关于异常,子类重写方法异常范围要小于父类方法异常或没有异常
5、方法重写和方法重载的区别
1.方法重写和方法重载的区别?方法重载能改变返回值类型吗?
1.Overload:重载
2.Override:重写
1.重载:在一个类中,可以定义多个同名的方法,但形参列表不完全相同;跟返回值无关;
2.重写:在子类中,可以定义跟父类一模一样的方法(返回值类型、方法名、形参列表完全相同),这时
子类的方法会覆盖父类中同名的方法。
创建一个父类Student
创建一个子类PrimaryStudent
创建一个MyClass
根据结果可知,子类的方法覆盖了父类前面文章提到:final方法不能被子类的方法覆盖
我们来试一下
修改父类的方法
回到子类去看一下
show方法有报错,报错信息为:
Cannot override the final method from Student二、补充一下super的用法
父类不变
子类做修改,添加super.show();
运行结果
分析:由于在子函数中使用的super关键字,super相当于一个指向自己超(父)类的一个指针,在子类PrimaryStudent的show()方法中,首先调用了父类的show()方法,这样做的好处是可以将子类中show()方法的代码内容视为父类Student中show()方法的补充。