函数重写

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: 通达
————————————————————————————————