函數重寫
class A
{
public void f()
{
System.out.printf("AAAA\n");
}
}
class B extends A
{
void f()
{
System.out.printf("BBBB\n");
}
}
class M
{
public static void main(String[] args)
{
}
}
程序運行示例:
——————————————————————————————
M.java:15: 錯誤: B中的f()無法覆蓋A中的f()
void f()
^
正在嘗試分配更低的訪問權限; 以前爲public
1 個錯誤
————————————————————————————————
方法重寫
- 方法重寫
- 重寫方法必須和被重寫方法具有相同的方法名稱、參數列表和返回值類型
- 子類中不允許出現與父類同名同參但不同返回類型的方法,如果出現了,編譯時會報錯
- 重寫方法時,不能使用比父類中的方法更嚴格的訪問權限(原因等我們講到多態時再講)
class A
{
public int f(int i)
{
System.out.printf("AAAA\n");
return 10;
}
}
class B extends A
{
public int f(int i)
{
System.out.printf("BBBB\b");
return 10;
}
}
class M
{
public static void main(String[] args)
{
B bb = new B();
bb.f(10); 因爲f()已經被重寫了,所以此處應該自動調用B類中重寫的f()函數
}
}
程序運行示例:
——————————————————————————————
BBBB
————————————————————————————————
重寫的意義
- 如果子類對繼承自父類的方法不滿意,就應該重寫父類的方法
重寫方法示例:
class Human
{
private String name;
private int age;
public Human()
{
}
public Human(String name,int age)
{
this.name = name;
this.age = age;
}
public void setName()
{
this.name = name;
}
public void setAge(int age)
{
this.age = age;
}
public String getInfor()
{
String strInf = name + ": " + age;
return strInf;
}
}
class Student extends Human
{
public String school;
public Student()
{
}
public Student(String name,int age,String school)
{
super(name,age);
this.school = school;
}
public void setSchool(String school)
{
this.school = school;
}
public String getInfor()
{
String strInf = super.getInfor() +": " + school;
return strInf;
}
}
public class M
{
public static void main(String[] args)
{
Student st1 = new Student("彭晨",22,"通達");
System.out.printf("%s\n",st1.getInfor());
}
}
程序運行示例:
——————————————————————————————
彭晨: 22: 通達
————————————————————————————————