重载能够使具有相同名称但不同数目和类型参数的类传递给方法。
注:
一是重载方法的参数列表必须与被重载的方法不同,并且这种不同必须足以清楚地确定要调用哪一个方法;
二是重载方法的返回值类型可以与被重载的方法相同,也可以不同,但是只有返回值类型不同不能表示为重载。
例如,最常用的println()方法在JDK的java.io.PrintStream中定义了十几种形式的重载,常用格式如下:
public void println(int i) {....}
public void println(double i) {....}
public void println(String i) {....}
/********************************************************** * "方法重载"的使用方法及其示例代码*/ public class OverloadRewrite { void num(int i){ System.out.println("接收到的是int类型参数,其值="+i); } void num(float j){ System.out.println("接收到的是float类型参数,其值="+j); } void num(String k){ System.out.println("接收到的是String类型参数,其值="+k); } public static void main(String [] args) { OverloadRewrite a=new OverloadRewrite(); a.num(100); a.num(100.20f); a.num("Hello!"); } }
当子类继承父类时,可以拥有父类中的成员方法和成员变量,在子类创建独有的成员即可。但是,如果创建一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为方法重写或方法覆盖。
注:
一是返回值类型与参数列表必须与被重写的返回值类型和参数列表相同,否则不能称为重写;
二是访问修饰符的限制一定要大于被重写方法的访问修饰符(public > protected > default > private);
三是重写方法一定不能抛出新的检查异常或者比被重写方法声明更加宽泛的检查型异常。例如,父类的一个方法声明了一个检查异常IOException,在重写这个方法时,就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
/********************************************************** * "方法重写"的使用方法及其示例代码*/ public class OverloadRewrite { public String Name; public String Address; public OverloadRewrite(String name,String address) { //构造方法 this.Name=name; this.Address=address; } public String toString() { //重写toString return "我的名字是:"+Name+",产地是:"+Address; } public class sichuancai extends OverloadRewrite{ // 继承 public String Detail; public sichuancai(String name,String address,String detail){ //构造方法 super(name, address); //super调用父类相应的构造方法 this.Detail=detail; } } // public String toString() { //重写toString // return "我的名字是:"+Name+",产地是:"+Address+",特点是:"+this.Detail; // } public static void main(String [] args) { OverloadRewrite food=new OverloadRewrite("面条", "意大利"); System.out.println(food); sichuancai sichuan=food.new sichuancai("麻辣烫", "成都", "麻辣和香辣"); System.out.println(sichuan); } }
this关键字可用于在任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。
注:当一个类的属性名或成员变量与访问该属性的方法参数名相同时,则需要使用this关键字来访问类中的属性,以区分类的属性和方法中的参数。
由于子类不能继承父类的构造方法,因此要调用父类的构造方法,必须在子类的构造方法的第一行使用super()。
super()方法会调用父类相应的构造方法,完成子类对象的部分初始化工作。
注:程序在以下两种情况下需要使用super()关键字:
一是在类的构造方法中,通过super语句调用该类的父类的构造方法。
二是在子类中访问父类中的成员。