java中的this和super

1.this

this作为隐式参数,也就是被构造的对象,我们以this.实例域的方式来访问实例域。

public Employee(String name,double salary)

{

this.name=name;

this.salary=salary;

}

这里简单说一下隐式参数和显示参数的区别,隐式参数一般出现在方法名之前,并代表某个对象。显示参数一般位于方法

名后面括号中的数值。我们看下面这个语句,number007就是一个隐式参数,5是一个显示参数。

number007.raiseSalary(5);

this的另一个作用是调用自己同一个类的其他构造器,形式为this(...),我们看下面的例子:

public Employee(double s)

{

//调用Employee(String,double)

this("Employe#"+nextId,s);

nextId++;

}

当我们调用new Employee(6000)的时候,Employee(double)构造器将调用Employee(String,double)构造器。

2.super

不要认为super和this引用是类似的概念,this是一个对象的引用代表某个对象,而super只是一个指示编译器调用超类方法的特殊关键字。

class Tiger {
    int age; // 年龄
    int hight; // 身体高度

      public Tiger() {
        print();
      }

      public void print() {
         System.out.println("I‘am a " + age + "岁 " + hight + "尺高 tiger!");
     }
 }
 public class JavanTiger extends Tiger {
     public JavanTiger() {
         super();    // 调用父类无参数的构造函数
     }
    public static void main(String[] args) {
         new JavanTiger();
     }
 }以上是一个super()调用父类无参数构造器的例子,但是如果子类的构造器没有显式的调用超类的构造器,则将自动地调用超类默认(没有参数)的构造器。注意,如果超类没有不带参数的构造器,并在子类的构造器中又没有显式地调用超类其他构造器,那么java编译器将报告错误。
class Tiger {
    int age; // 年龄
     int hight; // 身体高度

     public Tiger(int age) {
      this.age = age;
    print();
     }
    public void print() {
         System.out.println("I‘am a " + age + "岁 " + hight + "尺高 tiger!");
     }
 }
 public class JavanTiger extends Tiger {
     public JavanTiger() {
         super(1);    // 调用父类有参数的构造函数
    }
    public static void main(String[] args) {
         new JavanTiger();
     }
 }以上是super调用有参数构造器的例子。最后,最重要的是,this和super不能同时出现在子类的构造函数中,java规定this和super必须出现在构造函数的第一行。
时间: 2024-12-14 06:11:29

java中的this和super的相关文章

java中的this与super的区别

1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.println("Base"); } } public class Checket extends Base { Checket() { super();//调用父类的构造方法,一定要放在方法的首个语句 System.out.println("Checket"); } public static void mai

Java中关键词之this,super的使用

一.this关键词介绍. 说明:该知识点仅仅限于本人对其了解的范围. package com.study.java.oop; /** * 核心点:"this是指向对象本身的一个指针" * 出现的位置: 只能用于方法的方法体内(且该方法是只能是类中的非静态方法) * 静态方法和静态块中绝对不可使用 * 使用的方式: * this(参数) >>> 调用的是类的构造方法 有参数调用的是 有参构造 无参 调用无参构造 * this.成员变量名 >>>调用类

Java笔记十六.java中的this和super用法

一.this引用句柄 this引用句柄在Java程序里的作用,可表现为它在函数内部就是这个函数所属的对象的引用变量,即当前对象.在成员方法中,对访问的同类中成员前加不加this引用,效果都是一样的,这就好像同一公司的职员彼此在提及和自己公司有关的事时,不必说出公司名一样,当然为了强调,可以加上"咱们公司....."这样的前缀,而在Java程序中,this就相当于"我们所属于的那个对象". 每个成员方法内部,都有一个this引用变量,指向调用这个方法的对象.下面我们开

Java中this和super关键字

今天练习到Java中的this和super关键字,我有如下总结: 1.子类继承父类,子类初始化对象,必须先调用父类构造方法,因为随时有可能要使用父类的成员变量. 2.get和set方法只是对成员变量进行赋值操作,而非初始化. 3.构造方法既能对成员变量进行初始化,又能对其进行赋值操作. 4.子类只要调用父类的构造方法(不管是带参还是无参都行,都用super(······)调用)即可对父类的成员进行初始化, 5.如果子类有两个构造方法,一个可以调用父类带参构造方法,另一个可以用this(···)调

浅谈Java泛型中的extends和super关键字(转)

泛型是在Java 1.5中被加入了,这里不讨论泛型的细节问题,这个在Thinking in Java第四版中讲的非常清楚,这里要讲的是super和extends关键字,以及在使用这两个关键字的时候为什么会不同的限制.    首先,我们定义两个类,A和B,并且假设B继承自A.下面的代码中,定义了几个静态泛型方法,这几个例子随便写的,并不是特别完善,我们主要考量编译失败的问题: public class Generic{ //方法一 public static <T extends A> void

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

1.this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的.要注意的是this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this.his也可作为构造函数来使用.在后面可以看到 而什么是super,可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类.super的作用同样是可

Java中super和this的用法和区别

许多同学在学习Java时分不清楚this和super的用法和区别,今天偶然发现一片加精的博文,看完内容准备自己也写下来积累一下 1.如果想在子类的构造方法中调用父类的构造方法,必须在子类的构造方法中使用super();且必须将其放在首句 public class L1106Demo06 { public static void main(String[] args) { lake M=new lake(); } } /*super方法的用法1. * 在子类的构造方法中若果要想要调用父类的构造方法

java中super的作用

super()的作用 super可以用来访问超类的构造方法和被子类所隐藏的方法,如果子类中有方法与超类中的方法名称和参数相同,则超类中的方法就被隐藏起来,也就是说在子类中重载了父类中的方法. 引用父类中所隐藏的语法格式如下: super(参数列表)或super.方法名(参数列表) 下面通过代码展示一下super的用法: package cn.demo; public class Demo1 { public static void main(String[] args) { SubClass_A

浅谈Java泛型中的extends和super关键字

泛型是在Java 1.5中被加入了,这里不讨论泛型的细节问题,这个在Thinking in Java第四版中讲的非常清楚,这里要讲的是super和extends关键字,以及在使用这两个关键字的时候为什么会不同的限制.  首先,我们定义两个类,A和B,并且假设B继承自A. package com.wms.test; import java.util.ArrayList; import java.util.List; public class Generic { public static void