• java super的使用(翻译自Java Tutorials)


    原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/11/26/2789722.html

    访问父类的成员

    如果你覆盖了父类的方法,你可以通过super调用父类被覆盖的方法,也可以通过super引用被隐藏的变量(尽管隐藏变量是不推荐的方式).

    假设父类是这样的:

    public class Superclass {
    
        public void printMethod() {
            System.out.println("Printed in Superclass.");
        }
    }

    这里有一个子类Subclass,它会覆盖方法printMethod():

    public class Subclass extends Superclass {
    
        // overrides printMethod in Superclass
        public void printMethod() {
            super.printMethod();
            System.out.println("Printed in Subclass");
        }
        public static void main(String[] args) {
            Subclass s = new Subclass();
            s.printMethod();    
        }
    }

    在Subclass的方法printMethod(),覆盖了父类的printMethod()方法,如果要引用父类的printMethod()方法,必须使用一个被修饰的名字,如上使用super.编译并执行Subclass,输出如下:

    Printed in Superclass.
    Printed in Subclass

    子类构造方法

    下面的例子详解如何使用super关键字调用父类的构造方法,回顾之前Bicycle的例子,MountainBike是Bicycle的子类,这里是MountainBike(子类)构造方法调用父类构造方法,并添加自己的初始化代码的例子:

    public MountainBike(int startHeight, 
                        int startCadence,
                        int startSpeed,
                        int startGear) {
        super(startCadence, startSpeed, startGear);
        seatHeight = startHeight;
    }  

    调用父类的构造方法,必须位于子类的构造方法的第一行.

    调用父类的构造方法的语法如下:

    super();  
    or:
    super(parameter list);

    super()是调用父类的无参构造方法, super(parameter list)是调用父类对应的参数的构造方法。

    注意:如果子类不显式调用父类的构造方法,java编译器会自动插入一条调用父类的无参构造方法的指令,如果父类没有无参构造方法,会出现一个编译时异常.Object没有这个问题,如果object是唯一的父类,就不存在问题。

    如果子类的构造方法调用父类的构造方法,不管显式还是隐式,你也许会思考整个构造方法经过所有对象的链路.事实上是存在的,它称之为构造方法链,而且你必须意识到,有一个同样的链路从最顶层的类返回。

  • 相关阅读:
    保罗·多兰《设计幸福》阅读笔记
    依梦随忆(她)
    科技与人性的交汇处----人和机器人的边际在哪里?
    luogu 5月月赛 #A
    luogu P3916 图的遍历
    数论基础之组合数&计数问题
    洛谷——P3173 [HAOI2009]巧克力
    洛谷——P1748 H数
    洛谷——P1404 平均数
    POJ2454——Jersey Politics
  • 原文地址:https://www.cnblogs.com/ggjucheng/p/2789722.html
Copyright © 2020-2023  润新知