JAVA-入門 函數重寫(郝斌)(自學筆記)

函數重寫

class A
{
    public void f()
    {
        System.out.printf("AAAA\n");
    }
    //     public void f(int i)
    // {
    //     System.out.printf("哈哈\n");
    // }

}
class B extends A
{
    void f()
    {
        // super.f();      //調用從父類繼承過來的f方法
        // f(10);
        System.out.printf("BBBB\n");
    }

}
class M
{
    public static void main(String[] args)
    {
        // B bb = new B();
        // bb.f();
    }
}

程序運行示例:
——————————————————————————————
  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();
        // System.out.printf
        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.name = name;        //error 因爲name是私有的
        // this.age = age;             //error 同山
        this.school = school;
    }
    public void setSchool(String school)
    {
        this.school = school;
    }
    public String getInfor()
    {
        // String strInf = name + ": " + age + ": " + school;//error name是私有的
        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: 通達
————————————————————————————————
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章