? ? ? ? 在了解完毕构造器之后,我们就知道关键字super和this的作用了
this
? ?在java中thiis关键字通常是指向对象本身,换句话说,this的本质就是‘创建完毕的对象的地址’,通过这个地址,你就可以查询到这个对象。
this的常用的几种方法
第一种: 当形参与成员名字重名时;用this代表当前当前类里的成员,没有用this代表形参。
public class test {
public String name;
public int age;
public void t(String name , int age){
this.name = name;
this.age = age;
}
}
?第二种:this指向对象本身。
public class A {
public void test() {
this.print();
}
private void print() {
System.out.println("abc");
}
public static void main(String[] args) {
A a = new A();
a.test();
}
第三种:
也是我们最常用的,调用构造函数,这是和super用法很相似的地方,所以和super一起说。
super
super在子类中使用时,会指向自己的父类对象,且是离自己最近的父类。
super的常用的几种方法
第一种:
? ? ? ? 直接使用super.成员名,就可以直接调用父类中的成员。
public class test {
public String name;
public int age;
public void t(String name , int age){
this.name = name;
this.age = age;
}
}
class test1 extends test{
public void t1(){
System.out.println(super.name);
}
}
第二种:
? ? ? ? 当子类和父类的成员变量或方法同名时,可以用super来进行区别。
public class test {
public String name;
}
class test1 extends test{
public String name;
public void t1(){
System.out.println(name);
System.out.println(super.name);
}
}
第三种:?这个和上面this的一样,调用构造器,重点。
????????super(参数):调用父类中的某一个构造器。
????????this(参数): 调用子类中的某一个构造器。
public class Dome2 {
public static void main(String[] args) {
new W();
}
}
class T{
public T(){
System.out.println("父类无参构造器");
}
public T(String name){
System.out.println("父类有参构造器");
}
public void test(){
System.out.println("父类test");
}
}
class W extends T{
public W(){
this("a");
System.out.println("子类无参数构造器");
}
public W(String name){
super("a");
System.out.println("通过子类调用---子类有参数构造器");
}
public void test(){ //更改的 方法的实现
// 方法重写:方法名名相同参数相同
System.out.println("重写----子类test");
}
}
运行结果:
?
this和super注意事项?
- this和super在构造方法第一行存在且只能有this或super中一个。
- 当构造方法第一行既没有this也没有super关键字,则默认有一个无参的super。
- this和super都是调用构造器,this是调用本类中构造器,super是调用超类中的构造器。
- 当子类和超类中成员名重合时,super.成员名 代表超类中的成员名。
- this()和super()都是指向指向对象,均不可在static环境下使用。
- this实质是指向对象,而super是Java的一个关键字。
|