Java(二) this 和super 详解

老忘记的一些理论知识,发现这篇文章比较详细,先保存下来,以后还会完善。


--------------------------------------------------------------------------------------------------------

this和super的区别

No.

区别

this

super

1

操作属性

this.属性:表示调用本类中的属性,如果本类中的属性不存在,则从父类查找

super.属性:表示调用父类中的属性

2

操作方法

this.方法():表示调用本类中的方法,如果本类中的方法不存在,则从父类查找

super.方法():表示调用父类中的方法

3

调用构造

this()调用本类中的其他构造方法

super():由子类调用父类中的构造方法

4

查找范围

先从子类中查找,如果没有从父类中查找

不查子类直接查找父类

5

特殊

当前对象

-

既然this和super都可以调用构造,那么这两者绝对不能同时出现,因为只要是调用构造,就必须将语句放在构造方法的首行,而且以后开发的时候建议明确的写出“this.方法”或者“super.方法()”,这样便于代码的维护。

--------------------------------------------------------------------------------------------------------



  1. 最好把super和this放在一起,对比着理解。  
  2. super指向父类,用于引用父类的构造方法。  
  3. this指向本类,用于引用本类中的其他方法。  
  4. 这么说太抽象,下边是一个很经典的例子,完全体现了super和this的用法和区别,请花几分钟把它读完:  
  5. class Person {  
  6.     public static void prt(String s) {  
  7.        System.out.println(s);  
  8.     }  
  9.   
  10.     Person() {  
  11.        prt("A Person.");  
  12.     }//构造方法(1)  
  13.    
  14.     Person(String name) {  
  15.        prt("A person name is:" + name);  
  16.     }//构造方法(2)  
  17. }  
  18.    
  19. public class Chinese extends Person {  
  20.     Chinese() {  
  21.        super(); // 调用父类构造方法(1)  
  22.        prt("A chinese.");// (4)  
  23.     }  
  24.    
  25.     Chinese(String name) {  
  26.        super(name);// 调用父类具有相同形参的构造方法(2)  
  27.        prt("his name is:" + name);  
  28.     }  
  29.    
  30.     Chinese(String name, int age) {  
  31.        this(name);// 调用具有相同形参的构造方法(3)  
  32.        prt("his age is:" + age);  
  33.     }  
  34.    
  35.     public static void main(String[] args) {  
  36.        Chinese cn = new Chinese();  
  37.        cn = new Chinese("kevin");  
  38.        cn = new Chinese("kevin", 22);  
  39.     }  
  40. }  
  41. 执行结果为:  
  42. A Person.  
  43. A chinese.  
  44. A person name is:kevin  
  45. his name is:kevin  
  46. A person name is:kevin  
  47. his name is:kevin  
  48. his age is:22  
  49.   
  50. 下边总结一下super和this的异同:  
  51. 1)super(参数):调用父类的构造方法 。  
  52. 2)this(参数):调用本类的其他构造方法。  
  53. 3)都必须放在构造方法的第一行。  
  54. 3)super:引用父类中的成员,当子类和父类中的方法重名时,这样用。  
  55. 4)this:代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)。  
  56. 5)this()和super()都指的是对象,所以,均不能在static环境中使用。包括:static变量,static方法,static语句块。  
  57. 6)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。  

--------------------------------------------------------------------------------------------------------

(十分感谢)转自: http://blog.csdn.net/tanyit/article/details/6946443

相关文章: http://www.jb51.net/article/44589.htm

http://zhangjunhd.blog.51cto.com/113473/20531/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章