super和this

  • super关键字: 用来实现对父类成员的访问,引用当前对象的父类
  • this关键字: 用来指向自己的访问
class Animal {
  void eat() {
    System.out.println("animal : eat");
  }
}
 
class Dog extends Animal {
  void eat() {
    System.out.println("dog : eat");
  }
  void eatTest() {
    this.eat();   // this 调用自己的方法
    super.eat();  // super 调用父类方法
  }
}
 
public class Test {
  public static void main(String[] args) {
    Animal a = new Animal();
    a.eat();
    Dog d = new Dog();
    d.eatTest();
  }
}

--输出结果为:

animal : eat
dog : eat
animal : eat

super的继承问题

  • 子类不继承父类的构造器,会隐式或者显示的调用。
  • 当父类构造器有参数时,则在子类中必须以显示的super关键字来调用并配以适当的参数列表才能调用父类方法
  • 当父类存在无参构造器时,子类每个构造器不需要用super关键字,系统会自动调用父类的无参构造
    --eg:
class SuperClass {
  private int n;
  SuperClass(){
    System.out.println("SuperClass()");
  }
  SuperClass(int n) {
    System.out.println("SuperClass(int n)");
    this.n = n;
  }
}
class SubClass extends SuperClass{
  private int n;
  
  SubClass(){
    super(300);
    System.out.println("SubClass");
  }  
  
  public SubClass(int n){
    System.out.println("SubClass(int n):"+n);
    this.n = n;
  }
}
public class TestSuperSub{
  public static void main (String args[]){
    SubClass sc = new SubClass();
    SubClass sc2 = new SubClass(200); 
  }
}

--输出结果:

SuperClass(int n)
SubClass
SuperClass()
SubClass(int n):200

以上SuperClass()是系统自动调用父类的无参构造


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。this的用法在java中大体可以...
    Java和大数据阅读 1,885评论 0 0
  • 通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变...
    Aldeo阅读 2,823评论 0 0
  • 任何一个子类的创建,都会导致整个继承链上的所有的类被实例化## 网上各种文件都在说super和this的作用是感冒...
    Michael_林阅读 2,738评论 0 0
  • super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)this(参数):调用本类中另一种形...
    小沙鹰168阅读 3,928评论 0 0
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 7,947评论 2 9