有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java关于超级关键字?

JVM调用超类构造函数需要什么

public class Test1{
    public void dis()
    {
        System.out.println("In Test1");
    }
}

public class Test2 extends Test1{
    public void dis()
    {
        System.out.println("Inside test2");
        super.dis();
    }
}

既然dis()是一个实例方法,那么可以安全地假设super指向父类对象,因为构造函数是自动调用的吗


共 (5) 个答案

  1. # 1 楼答案

    super关键字可用于:

    • 调用该类中重写的方法的超类实现
    • 从子类构造函数访问超类的构造函数

    您的示例显示了第一种情况,在对Test2实例调用dis()时,程序必须按以下顺序打印:

    Inside test2 
    In Test1
    
  2. # 2 楼答案

    使用超级构造函数,我们可以直接从
    调用函数和变量 子类中的超类


    public class Test1{
     int a=5;
      } 
     public class Test2 extends Test1{
      int a=15;
      int c;
       c=a+super.a;
      System.out.println("value of c is:"+
      }
       result :value of c is:20
      you can call default constructor of super class by super() .
      if there is variables then you can call it by super(parameter_list).
    
  3. # 3 楼答案

    is it safe to assume that super is pointing to parent class object

    super关键字用于访问当前对象上的直接超类成员。它不引用任何超类对象

    since constructor is automaticallt called?

    super关键字的角色不依赖于被调用的超类构造函数。超级类构造函数总是通过构造函数链接调用,使用super()调用no-arg或参数化构造函数

    链接超类构造函数和调用超类成员之间的一个区别是:“链接构造函数时,super()调用必须是构造函数中的第一条语句,而您可以在当前方法中的任何点调用超类方法”

  4. # 4 楼答案

    关键字super没有指向某个“父类对象”。它是一个名称限定符,因此您可以引用父类中为当前对象定义的方法。因此,在以下方面:

    public class Test2 extends Test1{
        public void dis()
        {
            System.out.println("Inside test2");
            super.dis();
        }
    }
    

    调用super.dis()调用在父类中为此对象定义的dis()方法。它不会调用其他名为super的对象的dis()方法

    构造器的情况略有不同。每个构造函数必须始终以调用父类中的某个构造函数开始。可以使用super关键字显式执行此操作:

    public class Test2 extends Test1{
        public Test2() {
            super(); // explicitly invokes parent class default constructor
            . . .
        }
    }
    

    如果没有显式调用特定的父类构造函数,编译器会自动插入对默认(无参数)父类构造函数的调用。对父类构造函数(如果存在)的调用必须是构造函数中的第一条语句。但是,在一个方法中,super.可以用作任何名称的限定符(只要该名称是父类的成员)

  5. # 5 楼答案

    这与构造函数无关。由于在这两个类中都实现了Test2 extends Test1和dis(),因此超级。子类中的dis()将调用超类中的dis()