生活随笔
收集整理的这篇文章主要介绍了
java super和this总结
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
今天群里有人问我怎么复写父类的构造函数,我当时听错了以为是一般方法,然后就对他说只要同名就可以,然后他告诉我错了,我再仔细看,才知道他问的是复写
父类的构造方法,其实自己也不知道子类能不能复写父类的构造方法,查阅资料才知道子类不能继承父类的构造方法,更不能覆盖父类的构造方法。因此,子类如果想使用父类的构造方法,必须在子类的构造方法中使用,而且必须使用关键字super来表示,而且super必须是子类构造方法中的头一条语句。
于是我整理了关于super和this的知识点:
如果子类的属性名和父类重名,默认是子类的属性。调用父类的同名属性需要super.属性名;
1.什么是 super?什么是 this ?
super关键字表示超(父)类的意思。 this变量代表对象本身。
2.使用 super&this 调用成员变量和方法
可以使用 super访问父类被子类隐藏的变量或覆盖的方法。当前类如果是从超类继承而来的,当调用 super.XX()就是调用基类版本的 XX()方法。见示例 1。
当类中有两个同名变量,一个属于类(类的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用 this区分成员变量和局部变量。见示例 2。
示例 1
class Person { protected void print() { System.out .println( "The print() in class Person." ); } } public class DemoSuper extends Person { public void print() { System.out .println( "The print() in class DemoSuper." ); super .print(); // 调用父类的方法 } public static void main(String[] args) { DemoSuper ds = new DemoSuper(); ds.print(); } }
结果:
The print() in class DemoSuper.
The print() in class Person.
示例 2
public class DemoThis { private String name ; public void setName(String name) { this . name = name; // 前一个 name 是 private name ;后一个 name 是 setName 中的参数。 } }
3.使用 this 表示当前调用方法的对象引用
假设你希望在方法的内部获得对当前对象的引用,可使用关键字 this。 this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。见示例 3。
示例 3
Button bn ; … bn.addActionListener( this );
4.使用 super&this调用构造子
super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)。见示例 4。
this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)。 见示例 5。
示例 4
class Person { public static void prt(String s) { System.out .println(s); } Person() { prt("A Person." ); } Person(String name) { prt("A person name is:" + name); } } public class Chinese extends Person { Chinese() { super (); // 调用父类构造函数。 prt("A chinese." ); } Chinese(String name) { super (name); // 调用父类具有相同形参的构造函数。 prt("his name is:" + name); } public static void main(String[] args) { Chinese cn = new Chinese(); cn = new Chinese( "kevin" ); } }
结果:
A Person.
A chinese.
A person name is:kevin
his name is:kevin
示例 5
Point( int a, int b){ x=a; y=b; } Point(){ this (1,1); // 调用 point(1,1), 必须是第一条语句。 }
5.使用 super&this应该注意些什么?
1)调用 super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用 super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
2) super()和 this()类似 ,区别是, super从子类中调用父类的构造方法, this()在同一类内调用其它方法。
3) super()和 this()均需放在构造方法内第一行。
4)尽管可以用 this调用一个构造器,但却不能调用两个。
5) this和 super不能同时出现在一个构造函数里面,因为 this必然会调用其它的构造函数,其它的构造函数必然也会有 super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
6) this()和 super()都指的是对象,所以,均不可以在 static环境中使用。包括: static变量 ,static方法, static语句块。
7)从本质上讲, this是一个指向本对象的指针 , 然而 super是一个 Java关键字。
总结
以上是生活随笔 为你收集整理的java super和this总结 的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔 网站内容还不错,欢迎将生活随笔 推荐给好友。