重载与重写

一、方法重载

今天睡梦中起来,有个电话问我构造函数能被重载吗,想了想说不能,其实是可以的。我简直是没睡醒啊!!!

public class Teacher {

    private String name;
    private String gender;
    private int age;

    public Teacher(String name) {
        this(name, "");
        System.out.println("第一行构造器");
    }

    public Teacher(String name, String gender) {
        this(name, gender, 45);
        System.out.println("第二行构造器");
    }
    
    public int aa (String name1, String gender) {
//        this(name, gender, 45);
        System.out.println("第二行构造器");
        return 0;
    }
    
    public int aa (String gender) {
//        this(name, gender, 45);
        System.out.println("第二行构造器");
        return 1;
    }

    public Teacher(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        System.out.println("这是第三个构造函数");
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getGender() {
        return gender;
    }

    public void setAge(int age) {
        if (age > 100) {
            return;
        }
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void lecture() {

    }

    public void doExec() {

    }

    public String say() {
        String str = "我是" + name + ",性别  " + gender + ",年龄" + age;
        return str;
    }

}

class TestConstructor {
    public static void main(String[] args) {
        Teacher t = new Teacher("张三");
        System.out.println(t.say());

        Teacher t1 = new Teacher("李四", "");
        System.out.println(t1.say());

        Teacher t2 = new Teacher("王五", "", 33);
        System.out.println(t2.say());

    }
}
这是第三个构造函数
第二行构造器
第一行构造器
我是张三,性别  男,年龄45
这是第三个构造函数
第二行构造器
我是李四,性别  女,年龄45
这是第三个构造函数
我是王五,性别  男,年龄33

 

说说重载的概念

要注意重载必须是参数的类型或者参数个数不同,只有返回值不同是不能重载的。

 

方法重载是让类以统一的方式处理不同类型的数据都一种手段。调用方法时通过传递给它们的不同个数类型的参数来决定具体使用哪种方法,这就是多态性。

所谓方法重载是指在一个类中,多个方法的方法名相同,但参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同

 

//参数的顺序不同
public static String b (String a,int b){ System.out.println("String b (String a,int b)"); return a+b+1; } public static String b (int b,String a){ System.out.println("String b (int b,String a)"); return a+b+1; }
//下面的顺序不同但是也不行,因为都是一个类型,也就没有了顺序

	public int aa (String name1, String gender) {
		System.out.println(name1);
		System.out.println("第二行构造器");
		return 0;
	}
	
	public int aa (String gender,String name1) {
		System.out.println(name1);
		System.out.println("第二行构造器");
		return 0;
	}

 

 

方法的重载在实际应用中也会经常用到。不仅是一般的方法,构造方法也可以重载。

在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法。

重载是指我们可以定义一些名称相同的方法,通过定义不同的参数来区分这些方法,然后再调用时,Java虚拟机就会根据不同的参数列表来选择合适的方法执行。

也就是说,当一个重载方法被调用时,Java用参数的类型或者个数来决定实际调用的重载方法。因此,每个重载方法的参数的类型或个数必须时不同的。(上面的例子,参数个数相同,一个int 一个String ,然后调换顺序,也可以理解为是参数类型不同)

虽然每个重载方法可以有不同的返回类型,但返回类型不足以区分所使用的是哪个方法。(是否重载看的是参数列表,和函数返回类型没有关系)

 

当Java调用一个重载方法时,参数与调用参数匹配的方法被执行。在使用重载要注意一下的几点:

1 在使用重载时只能通过不同的参数列表,必须具有不同的参数列表。

2 不能通过访问权限、返回类型、抛出的异常进行重载。

3 方法的异常类型和数目不会对重载造成影响。

4 可以有不同的返回类型,只要参数列表不同就可以了。

5 可以有不同的访问修饰符

6 可以抛出不同的异常。

 

 

二、 方法重写 

方法重写与方法重载的区别

 

区别点 重载 重写(覆写)
英文   Overloading  Overiding
定义 方法名称相同,参数的类型或者个数不同 方法名称、参数类型、返回值类型完全相同
  被重写的方法不能拥有更严格的权限
范围 发生在一个类中 发生在继承中国呢

 

 

 

 

posted @ 2019-04-30 12:36  鹏鹏进阶  阅读(199)  评论(0)    收藏  举报