Java的覆写

一 属性覆写

1 点睛

所谓属性覆写,指的是子类定义和父类定义之中名称相同的属性。

2 代码

class Book
{
    String info = "Hello World." ;    // 如果加上private,1处的代码就会编译不过
}
class ComputerBook extends Book
{
    int info = 100 ;    // 属性名称相同
    public void print()
    {
        System.out.println(info) ;
        System.out.println(super.info) ;         // 1处代码
    }
}

public class OverrideData
{
    public static void main(String args[])
    {
        ComputerBook cb = new ComputerBook() ; // 实例化子类对象
        cb.print() ;
    }
}

3 运行

100
Hello World.

4 说明

该代码没有太大的意义,它并没有实现真实的覆写。为了满足类的封装型,类中的属性一般都需要private封装,一旦封装之后,子类根本就“看不见”父类的属性成员,子类定义的同名属性成员,其实就是一个“全新的”数据成员,所谓的覆写操作就没意义了。

二 super调用父类方法

1 点睛

子类中可以通过super.方法()调用父类中被覆写的方法。

2 代码

class Person
{
    String name;
    int age;
    public String talk( )
    {
        return "I am " + this.name + ", I am " + this.age + " years old";
    }
}
class Student extends Person
{
    String school;
    public Student( String name, int age, String school )
    {
        // 分别为属性赋值
        this.name = name;   //super.name = name;
        this.age = age;     //super.age = age;
        this.school = school;
    }

    // 此处覆写Person中的talk()方法
    public String talk( )
    {
        return super.talk()+ ", I am from " + this.school ;
    }
}

public class Override2
{
    public static void main( String[] args )
    {
        Student s = new Student( "Jack ", 25, "HAUT" );
        // 此时调用的是子类中的talk()方法
        System.out.println( s.talk() );
    }
}

3 运行

I am Jack , I am 25 years old, I am from HAUT

4 说明

在完成方法覆写时,需要注意以下几点:

覆写方法的返回类型必须和被覆写的方法的返回类型一致。

被覆写的方法不能为static。

被覆写的方法不能拥有比父类更严格的访问控制权限。

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/92011645