• 个人对Java中super关键字的理解


    在Java中,当子类重写了父类的方法后,子类对象将无法访问父类被重写的方法。

    super关键字用于访问父类的成员,包括成员变量,成员方法和构造方法:

    一:

      使用super关键字调用父类的成员变量和成员方法。

     1 //定义父类
     2 class Father
     3 {
     4     int age=40;
     5     //定义父类方法  
     6     void introduce()
     7     {
     8         System.out.println("父亲今年"+age+"岁了。");
     9     } 
    10 } 
    11 
    12 //定义子类
    13 class Child extends Father
    14 {
    15     //重写父类的方法
    16     void introduce()
    17     {
    18         //访问父类的成员方法
    19         super.introduce();
    20         int age=18;
    21         System.out.println("孩子今年"+age+"岁了");
    22         //访问父类的成员变量
    23         System.out.println("父亲已经"+super.age+"岁了。");
    24     }
    25 }
    26 
    27 class Test
    28 {
    29     public static void main(String[] args) 
    30     {
    31         Child c1 = new Child();
    32         c1.introduce();
    33     }
    34 }

    运行结果为:

    由运行结果可以看出,子类通过super关键字可以访问父类的成员变量和成员方法。

    二:

      通过super关键字调用父类的构造方法。

    //定义父类
    class Father
    {
        //父类有参的构造方法
        public Father(int age)
        {
            System.out.println("父类的成员方法被调用了");
            System.out.println("父亲今年"+age+"岁了。");
        }
    } 
    
    //定义子类
    class Child extends Father
    {
        //子类的构造方法
        public Child()
        {
            //调用父类有参的构造方法
            super(40);
        }
    }
    
    class Test
    {
        public static void main(String[] args) 
        {
            Child c1 = new Child();//创建对象,调用子类的构造方法
        }
    }

    运行结果为:

    从运行结果可以看出,子类的构造方法被调用时父类的构造方法也被调用了。

    如果我们把子类构造方法中"super(40);"这一句注释掉,编译就会出现以下错误:

      原因是在子类的构造方法中一定会调用父类的构造方法,这时可以通过super来指定调用哪一个构造方法,如果没有指定,则默认调用父类无参的构造方法,可是在代码中父类并没有定义无参的构造方法,所以会报错。所以,在类中一旦定义了有参的构造方法,最好也定义一个无参的构造方法。

    另外,和this关键字相似的地方有:

      通过super调用父类的构造方法的代码必须位于子类构造方法的第一行,且只能出现一次!

  • 相关阅读:
    [学习笔记]Nim游戏&SG函数
    [vijos1783][NOIP2012]疫情控制
    [vijos1782][NOIP2012]借教室
    [学习笔记]递推问题选讲
    [vijos1779][NOIP2012]国王游戏
    NET中使用三层构架如何从DAL层读取web.config中的数据库连接字符串!
    转:一个不错的网页进度条
    转:在没有数据时,如何使用FormView增加数据
    asp.net 2.0中的MessageBox.Show()方法
    TreeView与MultiView,View三个控件的组合使用
  • 原文地址:https://www.cnblogs.com/yangwanhao/p/7647858.html
Copyright © 2020-2023  润新知