`

Java编程那些事儿67——this和super

阅读更多

Java编程那些事儿67——thissuper

陈跃峰

出自:http://blog.csdn.net/mailbomb

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

8.8 thissuper

下面再来介绍一下thissuper关键字的使用。在程序中通过使用thissuper关键字,可以实现对于类内部很多内容方便的引用,也有助于理解面向对象的实现原理,更方便的理解面向对象技术的内部实现。

8.8.1 this关键字

this关键字代表自身,在程序中主要的使用用途有以下几个方面:

l 使用this关键字引用成员变量

l 使用this关键字在自身构造方法内部引用其它构造方法

l 使用this关键字代表自身类的对象

l 使用this关键字引用成员方法

8.8.1.1 引用成员变量

在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,有些时候可以省略,有些时候不能省略。首先看一下下面的代码:

/**

* 使用this引用成员变量

*/

public class ReferenceVariable {

private int a;

public ReferenceVariable(int a){

this.a = a;

}

public int getA(){

return a;

}

public void setA(int a){

this.a = a;

}

}

在该代码的构造方法和setA方法内部,都是用this.a引用类的成员变量。因为无论在构造方法还是setA方法内部,都包含2个变量名为a的变量,一个是参数a,另外一个是成员变量a。按照Java语言的变量作用范围规定,参数a的作用范围为构造方法或方法内部,成员变量a的作用范围是类的内部,这样在构造方法和setA方法内部就存在了变量a的冲突,Java语言规定当变量作用范围重叠时,作用域小的变量覆盖作用域大的变量。所以在构造方法和setA方法内部,参数a起作用。

这样需要访问成员变量a则必须使用this进行引用。当然,如果变量名不发生重叠,则this可以省略。

但是为了增强代码的可读性,一般将参数的名称和成员变量的名称保持一致,所以this的使用频率在规范的代码内部应该很多。

8.8.1.2 引用构造方法

在一个类的构造方法内部,也可以使用this关键字引用其它的构造方法,这样可以降低代码的重复,也可以使所有的构造方法保持统一,这样方便以后的代码修改和维护,也方便代码的阅读。

下面是一个简单的示例:

/**

* 使用this关键字引用构造方法

*/

public class ReferenceConstructor {

int a;

public ReferenceConstructor(){

this(0);

}

public ReferenceConstructor(int a){

this.a = a;

}

}

这里在不带参数的构造方法内部,使用this调用了另外一个构造方法,其中0是根据需要传递的参数的值,当一个类内部的构造方法比较多时,可以只书写一个构造方法的内部功能代码,然后其它的构造方法都通过调用该构造方法实现,这样既保证了所有的构造是统一的,也降低了代码的重复。

在实际使用时,需要注意的是,在构造方法内部使用this关键字调用其它的构造方法时,调用的代码只能出现在构造方法内部的第一行可执行代码。这样,在构造方法内部使用this关键字调用构造方法最多会出现一次。

8.8.1.3 代表自身对象

在一个类的内部,也可以使用this代表自身类的对象,或者换句话说,每个类内部都有一个隐含的成员变量,该成员变量的类型是该类的类型,该成员变量的名称是this,实际使用this代表自身类的对象的示例代码如下:

/**

* 使用this代表自身类的对象

*/

public class ReferenceObject {

ReferenceObject instance;

public ReferenceObject(){

instance = this;

}

public void test(){

System.out.println(this);

}

}

在构造方法内部,将对象this的值赋值给instance,在test方法内部,输出对象this的内容,这里的this都代表自身类型的对象。

8.8.1.4 引用成员方法

在一个类的内部,成员方法之间的互相调用时也可以使用“this.方法名(参数)”来进行引用,只是所有这样的引用中this都可以省略,所以这里就不详细介绍了。

8.8.2 super关键字

super关键字的中文意思是超级的,使用super关键字可以在子类中引用父类中的内容。主要的使用形式有以下几种:

l 在子类的构造方法内部引用父类的构造方法

l 在子类中调用父类中的成员方法

l 在子类中调用父类中的成员变量

8.8.2.1 引用父类构造方法

在构造子类对象时,必须调用父类的构造方法。而为了方便代码的编写,在子类的构造方法内部会自动调用父类中默认的构造方法。但是如果父类中没有默认的构造方法时,则必须手动进行调用。

使用super可以在子类的构造方法内部调用父类的构造方法。可以在子类的构造方法内部根据需要调用父类中的构造方法。

使用super关键字调用父类构造方法的示例代码如下:

//文件名:SuperClass.java

public class SuperClass {

public SuperClass(){}

public SuperClass(int a){}

}

//文件名:SubClass.java

public class SubClass extends SuperClass {

public SubClass(){

super(); //可省略

}

public SubClass(int a){

super(a);

}

public SubClass(String s){

super(); //可省略

}

}

在该示例代码中,SubClass继承SuperClass类,在SubClass类的构造方法内部可以使用super关键字调用父类SubClass的构造方法,具体调用哪个构造方法没有限制,可以在子类内部根据需要进行调用,只是根据调用的构造方法不同传入适当的参数即可。

由于SubClass类的父类SuperClass内部有默认的构造方法,所以SubClass的构造方法内部super()的代码可以省略。

和使用this关键字调用构造方法一样,super调用构造方法的代码只能出现在子类构造方法中的第一行可执行代码。这样super调用构造方法的代码在子类的构造方法内部则最多出现一句,且不能和this调用构造方法的代码一起使用。

8.8.2.2 引用父类成员方法

在子类中继承了父类中的成员方法,一般可以直接通过方法名使用,但是如果在子类中覆盖了父类的成员方法以后,如果需要在子类内部调用父类中被覆盖的成员方法时则不能直接调用了,这样就又需要使用super关键字了。

示例代码如下:

//文件名:SuperClass2.java

public class SuperClass2 {

public void test(){}

public void print(int a){

System.out.println("SuperClass2: " + a);

}

}

//文件名:SubClass2

public class SubClass2 extends SuperClass2 {

public void print(int a){

super.print(a);

System.out.println("SubClass2");

}

public void t(){

super.test(); //super可省略

super.print(0); //不可省略

}

}

8.8.2.3 引用父类成员变量

在子类中如果引用父类的成员变量,也可以使用“super.成员变量”来引用,只是一般成员变量的覆盖是没有意义的,所以这个时候都可以直接使用成员变量名进行引用,所以这里的super都可以省略。

8.8.3 注意的问题

最后,在实际使用thissuper时,除了上面介绍到的需要注意的问题以外,还需要特别注意的是,thissuper都是非静态的,所以这两个关键字都无法在静态方法内部进行使用。

分享到:
评论

相关推荐

    java编程那些事儿-陈跃峰31-70

    通过以上对文件名的分析,我们可以看到,《Java编程那些事儿》深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程的关键要素,以及程序控制流、类和对象、多态等重要主题,是初学者和进阶者提升Java技能的...

    java8函数式编程(csdn)————程序.pdf

    Java 8 函数式编程 Java 8 函数式编程是指在 Java 8 中引入的一种新的编程范式...Java 8 函数式编程提供了一种新的编程范式,强调不可变数据、无副作用和高阶函数,可以提高代码的可读性、可维护性和并发编程友好度。

    Java中的this和super的用法 

    Java 中的 this 和 super 的用法 Java 中的 this 和 super 是两个非常重要的关键字,它们都是用来访问对象的成员变量和方法的。下面我们将详细地讨论这两个关键字的用法和区别。 一、基础知识 1. super(参数):...

    Java SE编程入门教程 java this和super(共10页).pptx

    这些只是Java SE编程入门的一部分,实际学习过程中,还需要理解更多细节和实践应用,才能真正掌握Java编程。通过这些教程,初学者可以逐步构建扎实的Java基础,为进一步深入学习打下坚实的基础。

    javathis和super用法 this和 super 关键字的区别

    在Java编程语言中,`this`和`super`是两个非常重要的关键字,它们在面向对象编程中扮演着不可或缺的角色。正确理解和使用这两个关键字对于编写高质量、易于维护的Java代码至关重要。 #### 二、`this`关键字详解 ##...

    Java中this与super的用法

    Java 中的 this 和 super 是两个非常重要的关键字,它们都是用来访问对象或父类的成员变量或方法的。下面我们将详细地讲解它们的用法和区别。 首先,让我们来看一下 this 关键字。this 关键字是用来访问当前对象的...

    java中this与super用法

    在 Java 中,this 和 super 是两个重要的关键字,它们都是用于访问当前对象或父类中的成员变量或方法的。 this 用法 this 的用法在 Java 中大体可以分为三种: 1. 普通的直接引用 在类的成员方法中,可以使用 ...

    Java中this与super的区别

    Java中this与super的区别 this&super; 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 Java关键字this只能用于方法的方法体内。当一个对象创建后, Java虚拟机(JVM)就...

    java中this\super详解

    在Java编程语言中,`this`和`super`是两个非常重要的关键字,它们在面向对象编程中扮演着至关重要的角色。`this`关键字用于引用当前对象,而`super`则用于访问父类中的成员。本文将详细介绍这两个关键字的概念、用法...

    java中this 与super的详解

    java中this 与super的详解

    Java中两个非常特殊的变量:this和super

    在Java编程语言中,`this`和`super`是两个非常关键的特殊变量,它们提供了在类和对象间导航的能力。这两个关键字无需提前声明,它们各自有着特定的用途。 首先,`this`关键字用于引用当前对象。在成员函数内部,`...

    Java中static、this、super、final用法

    在Java编程语言中,`static`, `this`, `super`, 和 `final` 是四个非常重要的关键字,它们分别代表不同的概念并具有特殊的用法。 一、`static` `static` 关键字用于声明类级别的成员(变量或方法),这意味着它们...

    java中的this和super

    在Java编程中,`this` 和 `super` 是两个非常重要的关键字,它们可以帮助我们更清晰地处理类中的成员变量和方法,尤其是在面向对象编程中,正确理解和使用这两个关键字对于编写高质量的代码至关重要。本文将详细介绍...

    static、this、super、final的JAVA用法

    Java 中 static、this、super、final 的用法 静态方法(static method)是一种特殊的方法,它可以在不需要创建...static、this、super、final 是 Java 中四个非常重要的关键字,了解它们的用法是 Java 编程的基础。

    Java中static、this、super、final用法简谈

    Java中的`static`、`this`、`super`和`final`是四个非常重要的关键字,它们在编程中扮演着至关重要的角色。这篇文章将简要介绍这些关键字的基本用法及其应用场景。 1. **static** `static`关键字用于声明类级别的...

    Java面向对象编程思想.pdf

    this 和 super 是 Java 中的两个保留关键字,this 引用当前类的变量和方法,而 super 引用当前对象的直接父类中的成员。它们在继承的子类中使用,用于访问父类中的成员变量和方法。 八、构造函数 构造函数是类的...

    关于Java中this和super的用法介绍和区别共3页

    在Java编程语言中,`this`和`super`是两个非常关键的关键词,它们用于解决对象内部的引用问题,帮助开发者更好地理解和使用类与对象之间的关系。本篇将详细阐述`this`和`super`的用法以及它们的区别。 首先,`this`...

    Java中this、super用法.pdf

    在 Java 中,this 和 super 是两个非常重要的关键字,它们在编程中扮演着重要的角色。本文将详细介绍 this 和 super 的用法和意义,以便读者更好地理解和掌握它们。 this 在 Java 中,this 通常指当前对象。它可以...

Global site tag (gtag.js) - Google Analytics