关键字super明确显式地指出一个类可以它父类的构造函数、方法和变量。
关键字super和继承一起建立类和它的父类的紧密联系。继承隐含地指出子类对父类所拥有的访问权限。例如,当我们要调用一个实例方法时,如果实例本身并没有定义该方法,那我们自然地会得到它的父类中定义的同名方法。尽管会因为方法的覆盖或者使用定义与父类一样的实例或类变量(叫做“隐藏”)而失去这种访问的权力。这就是为什么要使用super这个关键字,它显式地指出子类可以直接访问父类中的某些部分,尽管有时这种访问会因为种种原因被屏蔽了的方法在其父类中的原始代码。
关键字Super在构造函数的使用中是非常重要的,和方法不同,构造函数是不能继承的;因此super是访问父类中构造函数的惟一途径。在子类的构造函数中,使用super(...)和适当的参数表可以触发对父类构造函数的一个条用,如果父类没有相应的构造函数,编译器会报错,这就是每个实例实现的初始化的过程链。实例先把自己作为一个Object实例进行初始化,然后从它的直接子类开始按照继承链依次调用构造函数直到最后将与当前类直接相关的内容初始化完毕。
例如,下面的Frame子类定义了两个构造函数,以便与Frame类提供的两个构造函数相匹配:
class exapleframe extends Frame(){
public ExampleFrame(){
super();
}
public ExampleFrame(String title_kpwang_com){
super(title_kpwang_com);
}
//... field and method definitions
}
在这个例子中,
http://www.kpwang.com/尽管两个构造函数只有简单地调用了父类的构造函数,而没有其他什么特别之处,但是我们在使用的时候仍然要将这些语句包括进去,因为构造函数是不能自动继承的。此外,如果构造函数要调用父类的构造函数,相应的调用语句必须是新构造函数的第一条语句。
这种链式的初始化过程Java中是非常重要的,以至于如果在程序中没有给出这种调用语句,系统便会自动地将它包括进去。系统自动调用的构造函数总是不带任何参数的那一个。例如JDk中Button类包含以下构造函数代码:
/* in Button.java(JDK 1.0.2) */
public Button(String label_kpwang_com){
this.label_kpwang_com = label_kpwang_com;
}
因为父类的构造函数会被自动包括进去,所有上面的代码就等于:
/* Equivalent Button constructor: */
public Button(String label_kpwang_com){
super();
this.label_kpwang_com = label_kpwang_com;
}
系统自动调用的缺省构造函数是没有任何参数的,但是可以显式地去调用父类中任一个带参数的构造函数。
Super的第二个常见用法是一个方法中去访问父类中的同名方法,这在含有方法覆盖的方法定义中显得非常有意义。在上下文中,super允许您定义一个覆盖函数:它可以通过调用父类中的方法而不是简单地用新代码完全替换掉它的方式覆盖。AWT的Button类再一次提供了一个简单例子:
/* in Button.java(JDK 1.0.2) */
Protected String paramString(){
return super.paramString()+",label_kpwang_com="+label_kpwang_com;
}
因为Button是Component的子类,它的paramString()方法会去调用Component的paramString方法,它返回一个 String类的字符串实例来描述和所有组件有关的参数,然后将按钮的标签添加到字符串中。因此,每个按钮如果调用paramString()方法就会返回一个包括按钮尺寸,在屏幕上的位置(所有AWT组件都有的信息)和按钮标签值(特定按钮子类的信息)等信息的字符串实例。
最后,我们还可以用super去访问被子类中同名变量隐藏的父类中变量。下列代码片段就给了一个简单示例:
class X{
int foo = l;//declaree instance variable foo
}
class SubX{
int foo = 2;//declaree own version of foo, which hides the
//superclass version
int getSuperFoo(){
return super.foo;//return l,not 2
}
}
分享到:
相关推荐
24.super关键字.zip24.super关键字.zip24.super关键字.zip24.super关键字.zip24.super关键字.zip24.super关键字.zip24.super关键字.zip24.super关键字.zip24.super关键字.zip24.super关键字.zip24.super关键字.zip24...
在Java编程语言中,`super`是一个特殊的关键字,用于引用当前对象的父类组件。当你创建一个子类时,子类继承了父类的属性和方法,`super`关键字就允许你在子类中直接访问这些继承的成员。下面我们将详细讲解`super`...
在Java编程语言中,`super`关键字是一个非常重要的概念,它允许我们引用当前对象的父类中的成员。这个关键字在处理继承关系时尤其有用,帮助我们实现多态性并访问被隐藏或重写的成员。本篇文章将深入探讨`super`...
Java 中 super 关键字的三种用法 Java 中的 super 关键字有三种用法:在子类的构造函数中调用父类的构造方法、在子类中访问父类的成员变量或方法、在子类的构造函数中直接传递参数给父类的构造方法。 首先,在子类...
在Java编程语言中,`super`关键字是一个非常重要的概念,它用于引用当前对象的父类。这个关键字在处理继承关系时特别有用,帮助我们更好地理解和操作对象的层次结构。在这个主题中,我们将深入探讨`super`关键字在...
深入浅析ES6 Class 中的 super 关键字 ES6 中的 Class 引入了一个新的关键字 super,这个关键字可以作为函数使用,也可以作为对象使用。在本文中,我们将深入浅析 ES6 Class 中的 super 关键字,了解其用法和特点。...
ES6对象的super关键字 super是es6新出的关键字,它既可以当作函数使用,也可以当作对象使用,两种使用方法不尽相同 1.super用作函数使用的时候,代表父类的构造函数,es6规定在子类中使用this之前必须先执行一次...
super关键字用于访问父类的成员,包括字段和方法。当你在子类中定义与父类同名的变量或方法时,可以通过super来区分。例如: ```java class Parent { int value = 10; void printValue() { System.out.println...
Java 编程语言中,this 和 super 是两个非常重要的关键字,这两个关键字在面向对象编程中扮演着非常重要的角色。下面我们将详细介绍 Java 中 this 和 super 的用法。 一、this 关键字 this 关键字在 Java 中是指向...
super关键字的用法与this关键字类似,但super关键字指代的是父类的对象。 七、方法重写 方法重写是子类中写一个和父类中方法名、返回值、参数都一模一样的方法。例如,在Person类中添加一个吃饭的方法eat(),在...
### Java中的this与super关键字详解 #### 一、引言 在Java编程语言中,`this`和`super`是两个非常重要的关键字,它们在面向对象编程中扮演着不可或缺的角色。正确理解和使用这两个关键字对于编写高质量、易于维护...
Java继承extends与super关键字详解 Java继承机制是面向对象编程(Object-Oriented Programming)的一个基本概念,它允许子类继承父类的特征和行为,使得子类具有父类相同的行为。Java中使用extends关键字来表示...
4. 关键字super和this的使用: - super用来调用父类的构造方法或成员变量 - this用来调用当前类的构造方法或成员变量 - super()和this()不能同时出现在一个构造函数中 5. 访问修饰符: - public:公共访问,...
在Java编程语言中,`super`关键字是一个非常重要的概念,它用于引用当前对象的父类。`super`关键字主要用于以下几种情况:调用父类的构造器、访问父类的成员变量以及调用父类的非私有方法。下面我们将详细探讨`super...
4、Personnel 被继承父类: 将其移至新建 package 中并在所需继承的类中添加继承关键字 extends、super() 5、course 被继承父类: (1)设定编号、课程名称、上课地点、时间、教授老师属性 (2)编写构造方法,使...
本资源摘要信息将对Java继承与接口进行详细的讲解,包括继承原理与机制、类继承的声明方法、成员变量的隐藏及方法的重写、抽象类与抽象方法、super和final关键字、多态的内涵及实现代码、接口的声明和使用等。...
在Java编程中,`super`关键字是一个非常重要的概念,它允许子类引用其直接父类的实例变量、方法,甚至调用父类的构造函数。理解并熟练运用`super`关键字是成为一名合格的Java开发者的关键技能之一。 首先,`super`...
本章还涉及到关键字super的使用,以及在创建对象时如何调用父类的构造方法。此外,本章还介绍了final关键字的应用,包括final修饰的变量、方法和类。下面将详细解读这些知识点。 首先,讲解Java的继承机制,Java...
super关键字用于调用父类的构造方法和方法,在子类中可以使用super关键字来调用父类的方法。 四、方法覆盖 在子类中,可以覆盖父类的实例方法,使用@Override注解来标注覆盖的方法。 五、多态性和动态绑定 多态...