Java 中构造器重载,方法重载和方法重写区别
开发工具与关键技术:Java
作者:吴永旗
撰写时间:2019年4月25日
-
什么构造器重载?
构造器重载名字相同,而形参列表一定不同或者形参列表次序不同,构造器名和类名相同,并且没有返回值
例子如下:
public class Dog {
public Dog(){//类名 Dog作为构造器名
System.out.println(“无参构造方法”);
}
public Dog(String name,int age){//类名 Dog作为构造器名,带有参数
System.out.println(“参构造方法1”);
}
public Dog(int age,String name){//类名 Dog作为构造器名,带有参数,次序不同
System.out.println(“参构造方法2”);
}
} -
认识什么是方法重载和方法重写
方法重载:一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同 而类型和次序不同,则称为方法的重载(Overloading)。
方法重写:在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一 样,返回值也一样的方法,就称为方法重写(Overriding)。 -
方法重载的规则有哪些?
-
必须形参列表不一样(参数个数或类型不一样);
-
可以改变返回类型
-
可以改变访问修饰符
-
可以声明新的或更广的检查异常
-
法能够在同一个类中或者在一个子类中被重载。
-
返回值类型不能作为重载函数的区分标准。
-
方法重写的规则有哪些?
-
参数列表必须完全与被重写方法的相同
-
返回类型必须完全与被重写方法的返回类型相同
-
访问权限不能比父类中被重写的方法的访问权限更低,例如,父类方法被声明public修饰,则子类重谢该方法是不能声明为protected
-
父类的成员方法只能被它的子类重写
-
声明为final的方法不能被重写
-
声明为static的方法不能被重写,但是能够被再次声明
-
子类和父类在同一个包中,那么子类可以重写父类所有除了声明为private和final 的方法
-
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和 protected的非final方法
-
重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常
-
构造方法不能被重写
-
如果不能继承一个方法,则不能重写这个方法
-
重写与重载之间的区别
区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做更严格的限制(可以降低限制) -
方法的重载示例如下:
public class Dog{
public void dog(){
System.out.println(“这是重载的方法1”);
}
public String dog(){
System.out.println(“这不是一个重载的方法”);
}
public void dog(String name){
System.out.println(“这是一个重载的方法2”);
}
public void dog(String name){
System.out.println(“这不是一个重载的方法”);
}
public void dog(String name,int age){
System.out.println(“这是一个重载的方法3”);
}
public void dog(int age ,String name){
System.out.println(“这是一个重载的方法4”);
} -
方法的重写示例如下: