Java基础巩固(一)
作者:互联网
一. 重载、重写的区别
1. 重载
在同一作用域下,有一组具有相同函数名,不同参数表的函数,这组函数被称为重载函数
注意:
- 函数名字相同
- 参数列表不同
- 参数个数不同
- 参数个数相同,但是其中有不同的参数类型
- 返回类型不作为判断条件,即返回类型不同无法构成重载
例子:
public class Test{
public static void main(String[] args){
reload(1);
reload(1, 2);
reload(1, "str");
}
public static void reload(int a){
System.out.println(a);
}
public static void reload(int a, int b){ //函数名相同,参数个数不同
System.out.println(a);
System.out.println(b);
}
public static void reload(int a, String b){ //函数名相同,参数个数相同,但是其中一个参数类型不同
System.out.println(a);
System.out.println(b);
}
}
以上三个reload均为重载,但下面这个例子则不是重载
public static int reload(int a){
System.out.println(a);
}
尽管返回类型由void
改为int
,但参数个数、参数类型都与第一个一致,因此会报错
2. 重写
指两个方法的返回值、方法名、参数的类型和个数相同,方法体不同(子类重写父类的方法)
重写的目的:
子类不一定需要父类的功能,或者父类的功能不能满足子类
注意:
-
需要有继承关系
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大但不能缩小(即父类的修饰符是Default,则子类的修饰符可以是Public、Protected、Default)
Public > Protected > Default > Private
-
声明为final的方法不能被重写
-
声明为Private的方法不能被重写
-
声明为static的方法不能被重写,但能被再次声明
-
如果子类和父类在同一个包内,那么子类可以重写父类的所有方法
-
如果子类和父类不在同一个包内,那么子类只能重写父类中声明为Public、Protected的方法
-
构造方法也不能重写
例子:
public class Test{
public static void main(String[] args){
A a = new A();
a.test(); //输出A
B b = new B();
b.test(); //输出B
}
}
public class A{
public void test(){
System.out.println("A");
}
}
public class B extends A{
@Override //这个注释可写可不写,写了方便标注方法重写
public void test(){
System.out.println("B");
}
}
在上面这个例子中,A的方法如果被声明为Protected,则B重写的方法只能被Protected或Public声明,同时,如果A的方法声明为Private,则无法被B重写,Private为私有,无法重写
二. 重载和重写的联系
重写和重载是java中的两种多态,重写是父类和子类之间的一种多态的表现,而重载是一个类的多态表现。
重载能改变返回值类型。
标签:巩固,Java,子类,void,基础,重载,父类,重写,public 来源: https://www.cnblogs.com/leezStudy/p/16363718.html