Java中的super是什么?
java中的super关键字是一个引用变量,用于引用父类对象。关键字“super”以继承的概念出现在类中。主要用于以下情况:

1.使用super与变量:
当派生类和基类具有相同的数据成员时,会发生此情况。在这种情况下,JVM可能会模糊不清。我们可以使用以下代码片段更清楚地理解它:

/* Base class vehicle */
class Vehicle
{
int maxSpeed = 120;
} /* sub class Car extending vehicle */
class Car extends Vehicle
{
int maxSpeed = 180; void display()
{
/* print maxSpeed of base class (vehicle) */
System.out.println("Maximum Speed: " + super.maxSpeed);
}
} /* Driver program to test */
class Test
{
public static void main(String[] args)
{
Car small = new Car();
small.display();
}
}

输出:

Maximum Speed: 120

在上面的例子中,基类和子类都有一个成员maxSpeed。我们可以使用super关键字访问sublcass中的基类的maxSpeed。

2.使用super方法:
当我们要调用父类方法时使用。所以,无论何时,父类和子类都具有相同的命名方法,那么为了解决歧义,我们使用super关键字。这段代码有助于理解super关键字的使用情况。

/* Base class Person */
class Person
{
void message()
{
System.out.println("This is person class");
}
} /* Subclass Student */
class Student extends Person
{
void message()
{
System.out.println("This is student class");
} // Note that display() is only in Student class
void display()
{
// will invoke or call current class message() method
message(); // will invoke or call parent class message() method
super.message();
}
} /* Driver program to test */
class Test
{
public static void main(String args[])
{
Student s = new Student(); // calling display() of Student
s.display();
}
}

输出:

This is student class
This is person class

在上面的例子中,我们已经看到,如果我们只调用方法message(),那么当前的类message()被调用,但是使用super关键字时,超类的message()也可以被调用。

3.使用超级构造函数:
super关键字也可以用来访问父类的构造函数。更重要的是,'超'可以根据情况调用参数和非参数构造函数。以下是解释上述概念的代码片段:

/* superclass Person */
class Person
{
Person()
{
System.out.println("Person class Constructor");
}
} /* subclass Student extending the Person class */
class Student extends Person
{
Student()
{
// invoke or call parent class constructor
super(); System.out.println("Student class Constructor");
}
} /* Driver program to test*/
class Test
{
public static void main(String[] args)
{
Student s = new Student();
}
}

输出:

Person class Constructor
Student class Constructor

在上面的例子中,我们通过子类构造函数使用关键字'super'调用超类构造函数。

其他要点:
1.调用super()必须是类构造函数中的第一条语句。
2.如果构造函数没有明确调用超类构造函数,那么Java编译器会自动向超类的无参构造函数插入一个调用。如果超类没有没有参数的构造函数,你会得到一个编译时错误。对象 确实有这样的构造函数,所以如果Object是唯一的超类,那就没有问题了。
3.如果子类构造函数调用其超类的构造函数,无论是显式还是隐式调用,您都可能认为调用了整个构造函数链,并返回到Object的构造函数。事实上,情况就是如此。它被称为构造函数链。

Java中super关键字的作用与用法的更多相关文章

  1. Java中static关键字的作用和用法详细介绍

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...

  2. java中super关键字的作用

    1.super关键字可以在子类的构造方法中显示地调用父类的构造方法,super()必须为子类构造函数中的第一行. 2.super可以用来访问父类的成员方法或变量,当子类成员变量或方法与父类有相同的名字 ...

  3. 【Java_基础】Java中Native关键字的作用

    本篇博文转载与:Java中Native关键字的作用

  4. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  5. Java中Native关键字的作用

    初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: 1 public native int hashCode(); 为什么有个native呢?这是我所要学 ...

  6. java中final 关键字的作用

    final 关键字的作用 java中的final关键字可以用来声明成员变量.本地变量.类.方法,并且经常和static一起使用声明常量. final关键字的含义: final在Java中是一个保留的关 ...

  7. Java中volatile关键字及其作用是什么?

    在 Java 多线程中如何保证线程的安全性?那我们可以使用 Synchronized 同步锁来给需要多个线程访问的代码块加锁以保证线程安全性.使用 synchronized 虽然可以解决多线程安全问题 ...

  8. Java 中 volatile 关键字及其作用

    引言 作为 Java 初学者,几乎从未使用过 volatile 关键字.但是,在面试过程中,volatile 关键字以及其作用还是经常被面试官问及.这里给各位童靴讲解一下 volatile 关键字的作 ...

  9. java中transient关键字的作用

    Java有个特点就是序列化,简单地来说就是可以将这个类存储在物理空间(当然还是以文件的形式存在),那么当你从本地还原这个文件时,你可以将它转换为它本身.这可以极大地方便网络上的一些操作,但同时,因为涉 ...

随机推荐

  1. <meta> 标记汇总

    1.  <meta name="viewport" content="width=device-width, initial-scale=1"> v ...

  2. 反射:newInstance()的使用方式

    通过反射创建新的类示例,有两种方式: Class.newInstance() Constructor.newInstance() 以下对两种调用方式给以比较说明: Class.newInstance( ...

  3. PCL推荐的命名规范(2)

    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=210 函数/成员函数命名 函数和类的成员函数的命名应该采用camelCase ...

  4. Ubuntu&nbsp;Navicat&nbsp;for&amp;nbs…

    首先上官网上下载LINUX版本: http://www.navicat.com/download 1. 下载 navicat110_mysql_en.tar.gz 文件 2. 下载后解压tar文件 t ...

  5. 《SpringBoot揭秘 快速构建微服务体系》读后感(三)

    SpringApplication:SpringBoot程序启动的一站式解决方案 深入探索SpringApplication执行流程 因为书上的版本是1.2的,比较老,这里参考http://blog. ...

  6. hdu2732 Leapin' Lizards (网络流dinic)

    D - Leapin' Lizards Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  7. 建立JNI层的本地对象,并与JAVA层交互方法

    最近在做OpenCV4Android开发的时候,需要从摄像头捕获多个图片,传值给本地对象,每次捕获到图片都更新数据,最后将计算得到的数据传给JAVA层,并在界面中显示.经过摸索和调试后,找到了通过本地 ...

  8. 给Fitnesse添加调用多参数fixture的调用方法

    修改文件:fitnesse.slim.fixtureInteraction.DefaultInteraction.java 修改如下三处内容: (注意只支持仅含有一个参数,且该参数是多参数的fixtu ...

  9. BZOJ2388:旅行规划(travel)——分块凸包

    题目 OIVillage 是一个风景秀美的乡村,为了更好的利用当地的旅游资源,吸引游客,推动经济发展,xkszltl 决定修建了一条铁路将当地 $n$ 个最著名的经典连接起来,让游客可以通过火车从铁路 ...

  10. 静态文件与APP

    目录 静态文件的配置和使用 什么是静态文件? 为什么使用静态文件 如何配置,使用静态文件 静态文件相关(动态配置) app创建预注册 app指什么? 创建一个APP 注册app app文件作用 app ...