美文网首页
Java中this、super关键字的用法

Java中this、super关键字的用法

作者: Harper324 | 来源:发表于2019-02-15 18:23 被阅读0次
    1、this

    当一个对象创建后,JVM就会给这个对象分配引用自己的指针,这个指针的名字就叫做this。也正因为如此,this只能用在非静态方法中。并且this只和特定的对象关联,而不和类关联(所以看到this就表示调用这个方法的对象)。

    this的具体用法有四种:

    1、调用类中的成员变量

    在下面的Student类中,定义了同名的成员变量和局部变量name,在成员方法中this这个关键字其代表的就是调用对象中的成员变量或者方法。也就是说,如果在某个变量前面加上一个this关键字,其指的就是这个对象的成员变量或者方法,所以在下面的代码中,this.name=name就是将局部变量的值传递给成员变量。

    Public Class Student { 
       String name; //定义一个成员变量name
       private void SetName(String name) { //定义一个参数(局部变量)name
          this.name=name; //将局部变量的值传递给成员变量
     }
    }
    

    2、调用本类中的其他构造方法

    构造方法是一个与类同名的没有返回值的方法,在Java类中必须存在一个构造方法。如果在代码中没有显式的体现构造方法的话,那么编译器在编译的时候会自动添加一个没有形式参数的构造方法。可以通过this调用本类中另一个构造方法,用法是this(参数列表),这个仅仅在类的构造方法中可以用,并且只能放在类的构造方法的方法体的第一句。在存在同名构造方法时,可通过方法重载来进行调用。

    public class Student { //定义一个类,类的名字为student
      String name;
      String id;
       public Student() { //定义一个构造方法
           this(“Hello!”); //调用其他构造方法
     }
       public Student(String name) { //定义一个带形式参数的构造方法
       this.name=name;    
     }
    }
    

    3、代表自身对象

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

    4、调用成员方法

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

    2、super

    super与this类似,是指向父类的指针,也只能用于非静态方法中
    1、调用父类的方法或成员变量

    class Country {
        String name;
        void value() {
           name = "China";
        }
    }
      
    class City extends Country {
        String name;
        void value() {
        name = "Shanghai";
        super.value();      //调用父类的方法
        System.out.println(name); //Shanghai
        System.out.println(super.name); //China
        }
      
        public static void main(String[] args) {
           City c=new City();
           c.value(); //调用子类的方法
           }
    }
    

    运行结果:
    Shanghai
    China
    在上面的例子中调用了父类的方法和成员变量

    2、调用父类构造方法
    必须写在方法体的第一行
    用法如下:

    class Person { 
        public static void prt(String s) { 
           System.out.println(s); 
        } 
       
        Person() { 
           prt("父类·无参数构造方法: "+"A Person."); 
        }//构造方法(1) 
        
        Person(String name) { 
           prt("父类·含一个参数的构造方法: "+"A person's name is " + name); 
        }//构造方法(2) 
    } 
        
    public class Chinese extends Person { 
        Chinese() { 
           super(); // 调用父类构造方法(1) 
           prt("子类·调用父类”无参数构造方法“: "+"A chinese coder."); 
        } 
        
        Chinese(String name) { 
           super(name);// 调用父类具有相同形参的构造方法(2) 
           prt("子类·调用父类”含一个参数的构造方法“: "+"his name is " + name); 
        } 
        
        Chinese(String name, int age) { 
           this(name);// 调用具有相同形参的构造方法(3) 
           prt("子类:调用子类具有相同形参的构造方法:his age is " + age); 
        } 
        
        public static void main(String[] args) { 
           Chinese cn = new Chinese(); 
           cn = new Chinese("codersai"); 
           cn = new Chinese("codersai", 18); 
        } 
    }
    

    运行结果:

    父类·无参数构造方法: A Person.
    子类·调用父类”无参数构造方法“: A chinese coder.
    父类·含一个参数的构造方法: A person's name is codersai
    子类·调用父类”含一个参数的构造方法“: his name is codersai
    父类·含一个参数的构造方法: A person's name is codersai
    子类·调用父类”含一个参数的构造方法“: his name is codersai
    子类:调用子类具有相同形参的构造方法:his age is 18

    从本例可以看到,可以用super和this分别调用父类的构造方法和本类中其他形式的构造方法。

    相关文章

      网友评论

          本文标题:Java中this、super关键字的用法

          本文链接:https://www.haomeiwen.com/subject/jtrpeqtx.html