1、方法重写(Overide)
1.1什么是方法重写?
1.2重写规则
1.3重写注意事项
2、方法重载(overload)
2.1什么是方法重载
2.2重载规则
3、方法重写和方法重载的区别
1、方法重写(Overide)
1.1什么是方法重写?
在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。 子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。在Java中覆盖继承父类的方法就是通过方法的重写来实现的。
方法的重写:子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型
1.2重写规则
重写遵循“两同一小一大”规则:
两同:
- 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。
- 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载
一小:
- 子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等
(在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。换句话说,重写方法一定不能抛出新的检查异常,或者比被重写方法声明更加宽泛的检查型异常。例如,父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。同样的道理,如果子类中创建了一个成员变量,而该变量和父类中的一个变量名称相同,称作变量重写或属性覆盖。)
一大:子类方法的访问权限应比父类方法访问权限更大或相等(特殊情况:子类不能重写父类被声明为private权限的方法)
1.3重写注意事项
- 父类中的私有方法不能被重写,该方法对于子类是隐藏的,因此其子类无法访问该方法,也无法重写
- 父类静态方法,子类也必须通过静态方法进行覆盖,即静态只能覆盖静态
- 子类重写父类方法时,最好声明得一模一样
- 如果子类中定义了一个与父类private方法具有相同的方法名、相同的形参列表、相同的返回值类型的方法,依然不是重写,只是在子类中重新定义了一个新的方法,所以该新方法不会受父类方法的任何限制。
例子:
package Overide;
class Student{
String name;
//构造函数
public Student(String name){
this.name = name;
}
public void study(){
System.out.println(name+"学习马克思列宁主义");
}
}
//基础班的学生是属于学生中一种
class BaseStudent extends Student
{
//BaseStudent类的构造函数
public BaseStudent(String name){
super(name);//指定调用父类构造函数
}
//重写
public void study(){
super.study();//一般子类调用的是重写后的方法,要想调用父类的要用super关键字
System.out.println(name+"学习javase..");
}
}
//就业班学生 也是属于普通学生中一种
class WorkStudent extends Student{
//构造 函数
public WorkStudent(String name){
super(name);
}
//重写
public void study(){
super.study();
System.out.println(name+"学习javaee+android..");
}
}
public class demo01 {
public static void main(String[] args)
{
//创建一个基础班的学生
BaseStudent s = new BaseStudent("居东东");
s.study();
//创建一个就业班的学生
WorkStudent w = new WorkStudent("张三");
w.study();
}
}
居东东学习马克思列宁主义
居东东学习javase..
张三学习马克思列宁主义
张三学习javaee+android..
2、方法重载(Overload)
2.1什么是方法重载
方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法,构造方法也可以重载。当Java调用一个重载方法时,参数与调用参数匹配的方法被执行
方法重载:在同一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。
2.2重载规则
- 在使用重载时只能通过不同的参数列表,必须具有不同的参数列表。
- 不能通过访问权限、返回类型、抛出的异常进行重载。
- 可以有不同的返回类型,只要参数列表不同就可以了。
- 方法的异常类型和数目不会对重载造成影响。
- 可以有不同的访问修饰符。
- 可以抛出不同的异常。
例子:
package Overload;
class House{
int height;
House (){
System.out.println("无参数构造函数");
height = 4;
}
House(int i) {
System.out.println("房子高度为 " + i + " 米");
height = i;
}
void info() {
System.out.println("房子高度为 " + height + " 米");
}
void info(String s) {
System.out.println(s + "房子高度为 " + height + " 米");
}
}
public class demo2 {
public static void main(String[] args) {
House h1 = new House();
House h2 = new House(6);
h1.info();
h1.info("我的");
h2.info();
h2.info("你的");
}
}
无参数构造函数
房子高度为 6 米
房子高度为 4 米
我的房子高度为 4 米
房子高度为 6 米
你的房子高度为 6 米
3、方法重写和方法重载的区别