A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

为什么super不加点号?这实在调用函数还是?

1 个回复

倒序浏览
super关键字:
        1.经常用于子类中;
        2.它用来访问父类中的成员:成员变量,成员方法,构造方法
        3.一般时候,我们不需要显示的使用。
        4.有些情况,在子类中,要访问父类的成员时,必须要显示的使用super:
          1).当子类的成员,覆盖父类成员时,并且需要访问父类成员时;
          2).父类没有提供"无参的构造方法"
class A
{
        int num = 10;
        //父类中,没有提供无参构造方法,只提供一个带参的构造方法,虚拟机就不会自动添加一个无参构造方法
        //此时,实例化一个子类时,虚拟机无法调用无参构造方法。
        //这时,就需要在子类中,显示的使用super(实参),去调用父类中带参的构造方法
        A(int n){
                System.out.println("A的带参构造方法");
        }
}
class B extends A
{

        int num = 20;//子类覆盖了父类的成员变量
       
        //子类必须在某个构造方法中,显示的使用super(实参),去调用父类中唯一的构造方法
        B(int n){
                super(n);//将实参n直接传递给父类的带参构造方法;
                //再做其它的事情
        }
        void show(){
                System.out.println("num = " + num);//就近原则,访问的就是子类的。
                System.out.println("super.num = " + super.num);//访问父类的成员变量
        }
}
class  Demo
{
        public static void main(String[] args)
        {
                B b = new B(10);
                b.show();
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马