zoukankan      html  css  js  c++  java
  • 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是唯一的父类,就不存在问题。

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

  • 相关阅读:
    新的工作电脑 神州优雅A550i7
    职责链模式(Chain of Responsibility)
    访问者模式(Visitor)
    单例模式(Singleton)
    解释器模式(Interpreter)
    迭代器模式(Iterator)
    解决 Visual Stuido 工具栏中的工具重置后,恢复回来。
    WCF 一步一步 发布 WCF服务 到 Windows 服务 (图)
    桥接模式(Bridge)与合成/聚合复用原则(CARP)
    dbentry访问带密码的Access
  • 原文地址:https://www.cnblogs.com/ggjucheng/p/2789722.html
Copyright © 2011-2022 走看看