代码改变世界

面向对象深入:继承02——隐藏与重载

2018-01-15 00:22  Jolene_Wu  阅读(211)  评论(0编辑  收藏  举报

11.3 继承中的多态

  在子类中定义了和父类同名的成员变量方法,这就涉及成员的隐藏与重载

成员的隐藏与重载属于多态特性的一种。

  通过继承,子类拥有除构造方法以外的所有成员(变量及方法),这类成员统称为子类的继承成员,在子类中是默认存在的。

  当子类与父类成员相同时:

  • 父类成员变量会隐藏;
  • 父类成员方法会重载与覆盖。

  这里的隐藏与覆盖并非替换,成员仍然存在,只是默认状态不能使用罢了。

11.3.1 隐藏——子类与父类的成员变量同名时

a. 子类就会把父类的变量隐藏起来,该变量默认为子类的成员变量。

b. 如果强制使用父类成员变量可以使用super关键字。

11.3.2 重载与覆盖——子类中出现于父类中同名的成员方法时

a. 子类中的成员方法与父类中的成员方法同名不同参数时——重载,利用参数可以区分它们与,不会互相干扰;

b. 子类中的成员方法与父类中的成员方法同名同参数时——覆盖,子类中的成员方法会屏蔽继承自父类的成员方法。

 

****关于构造方法能否继承

  构造方法不能被覆盖(屏蔽),也不能继承。父类构造方法必须在子类构造方法中调用:可以隐形调用默认无参构造方法或者用super()语句显性调用有参构造方法;

  若程序中需要显示调用父类构造方法而使用super()语句时,super()必须是子类构造方法定义中的第一句

  若没有,则系统调用默认的super()语句。

 

public class Example1107
{
    public static void main(String[] args)
    {
        SonClass sc = new SonClass();
    }
}

class SuperClass
{
    SuperClass( int i )    //父类构造方法,带参数
    {
        System.out.println("SuperClass");
    }
}

class SonClass extends SuperClass
{
    SonClass()
    {
        super(1);        //父类构造方法带参数,不能隐性调用,要用super(),super()语句必须是子类构造方法的第一条语句
        System.out.println("SonClass");
     }
}            

如果没有super(1); 程序编译会出错