重载
重载是一组功能的集合,增加了程序的灵活性和可读性
重载发生在编译期,在同一个类中根据不同的传参,执行不同的逻辑处理。
以下是关于重载的特点:
1.重载发生范围在同一个类中
2.方法的参数列表必须不一致(类型,个数,顺序不同)
错误示例
public class Test01 {
//方法的参数列表必须不一致(类型,个数,顺序不同)
//错误1.参数类型相同
public void dosth01(String str) { //报错
}
public void dosth01(String str01) { //报错
}
//错误2.参数顺序相同
public void dosth01(String str,int i) { //报错
}
public void dosth01(String str,int i) { //报错
}
}
正确示例
public class Test01 {
//方法的参数列表必须不一致(类型,个数,顺序不同)
public void dosth01(String str) {
}
public void dosth01(int i) {
}
public void dosth01(String str,int i) {
}
public void dosth01(int i,String str) {
}
}
3.方法的返回值和访问修饰符可以不同(与返回值和访问修饰符无关)
public class Test01 {
// 方法的参数列表必须不一致(类型,个数,顺序不同)
//返回String类型
public String dosth01(String str) {
return str;
}
//返回int类型
public int dosth01(int i) {
return i;
}
//访问修饰符为protected
protected void dosth01(String str, int i) {
}
//访问修饰符为public
public void dosth01(int i, String str) {
}
}
4.构造方法可以重载
public class Test02 {
//构造方法可以重载
//类的无参构造和有参构造相当于是一个重载
public Test02(){
}
public Test02(int num,String str) {
}
public Test02(String str) {
}
}
构造方法会发一个详细的详解,大家不要着急
重写
父类中的方法无法满足子类的要求时,需要重写父类的方法。
对于一个子类对象,当调用的方法子类中存在则调用子类的方法,若子类没有,则调用父类的方法。
在一个方法前一行添加@Override(eclipse快捷键在@后使用 Alt+/),用于检查当前方法是否符合重写
重写发生在运行期,子类对父类方法的内部逻辑重写改造,外部定义不能改变。
1.重写范围发生在子类中
子类对父类方法的重写
2.参数列表必须与父类方法一致
//父类
public class Test03 {
public void dosth(int i, String str) {
}
}
//子类
class Test04 extends Test03 {
@Override
public void dosth(int i, String str) {
System.out.println("子类对父类dosth方法的重写");
}
}
3.方法名,参数列表必须相同,抛出的异常范围小于等于父类
异常随后会补
4.子类返回值类型小于等于父类返回值类型
import java.util.ArrayList;
import java.util.List;
//List的返回值类型大于ArrayList的返回值类型
public class Test07 {
//返回值类型List
public List dosth01() {
return null;
}
}
class Test08 extends Test07{
@Override
//返回值类型ArrayList
public ArrayList dosth01() {
return null;
}
}
5.子类的访问修饰符大于等于父类
//父类
//访问修饰符:public(范围最大),private(范围最小)
public class Test03 {
//访问修饰符protected
protected void dosth(int i, String str) {
}
}
//子类
class Test04 extends Test03 {
@Override
//访问修饰符public
public void dosth(int i, String str) {
System.out.println("子类对父类dosth方法的重写");
}
}
6.如果父类的访问修饰符为private/final/static,则该子类就不能重写父类的方法
//父类
public class Test05 {
//private修饰的方法
//私有化,只能在当前类中使用,子类看不到
private void dosth01() {
}
//final修饰的方法
//final修饰的方法表示该方法不可被重写(可以重载,可以继承)
public final void dosth02() {
}
//static修饰的方法
public static void dosth03() {
}
}
//子类
class Test06 extends Test05{
//报错
//private修饰的方法不能被重写
@Override
private void dosth01() {
}
//报错
//final修饰的方法不能被重写
@Override
public final void dosth02() {
}
//报错
//static修饰的方法不能被重写
@Override
public static void dosth03() {
}
}
7.构造方法不能被重写
//父类
public class Test05 {
//父类无参构造
public Test05() {
}
}
//子类
class Test06 extends Test05{
//报错
@Override
public Test05() {
System.out.println("子类不能重写父类的构造方法");
}
}
以上就是重载与重写的全部内容,如有不当请大家多多指正。