广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中super关键字介绍以及super()的使用
  • 317
分享到

Java中super关键字介绍以及super()的使用

2024-04-02 19:04:59 317人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1、super的使用:2、先复习一下this关键字的使用。3、super关键字:总结:1、super的使用: (1)super是一个关键字。 (2)super和this很类似,我

1、super的使用:

(1)super是一个关键字。

(2)super和this很类似,我们对比着学习

2、先复习一下this关键字的使用。

(1)this能出现在实例方法和构造方法中;

(2)this的语法是“this.”和“this()”;

(3)this不能出现在静态方法中;

(4)this大部分情况下是可以省略的;

(5)this.什么时候不能省略呢?

在区分局部变量和实例变量时不能省略。例如:

Public void setName(String name){
    this.name = name;
}

(6)this()只能出现在构造方法的第一行,通过当前的构造方法去调用“本类”中的对应的构造方法,目的是:代码复用。

3、super关键字:

(1)super能出现在实例方法和构造方法中。

(2)super的语法是“super.”和“super()”。

(3) super不能出现在静态方法中。

(4) super大部分情况下是可以省略的。

(5)super.什么时候不能省略呢?
别急,我们想一下this指向的是什么,是当前对象自己。super和this类似,它指向了当前对象自己的父类型特征(也就是继承过来的那些东西)。

super和this区别是:this可以看做一个引用变量,保存了该对象的地址,是当前对象整体,而super代表的是父类型特征,是子类局部的一些东西,这些继承过来的东西已经在子类里面了,你可以输出整体this,但不能输出父类型特征super。因为super指向的东西不是一个整体,没法打印输出。

System.out.println(this);  //输出this.toString()的值
System.out.println(super);  //编译报错,需要'.'

当在子类对象中,子类想访问父类的东西,可以使用“super.”的方式访问。例如:方法覆盖后,子类内部虽然重写了父类的方法,但子类也想使用一下父类的被覆盖的方法,此时可以使用“super.”的方式。当子类中出现和父类一样的属性或者方法,此时,你要想去调用父类的那个属性或者方法,此时“super.”不能省略。

this和super都只能在对象内部使用。

this代表当前对象本身,super代表当前对象的父类型特征。

总结:“this.”是一个实例对象内部为了区分实例变量和局部变量。

而“super.”是一个实例对象为了区分是子类的成员还是父类的成员。

父类有,子类也有,子类想访问父类的,“super.”不能省略。**

(6)super()只能出现在构造方法的第一行,通过当前的构造方法去调用“父类”中的对应的构造方法,目的是:创建子类对象时,先初始化父类型特征。

用通俗的话来讲,要想有儿子,得先有父亲。

我们来看下面代码:

写两个类,Animal和Cat,Cat继承Animal。

//父类,Animal类
class Animal {
    //构造函数
    public Animal() {
        System.out.println("Animal类的无参数构造函数执行");
    }
}
​​​​​​​//子类,Cat类
class Cat extends Animal{
    //构造函数
    public Cat() {
        System.out.println("Cat类的无参数构造函数执行");
    }
}

执行下面一行代码:

Cat c1 = new Cat(); 

运行输出结果为:

    Animal类的无参数构造函数执行
    Cat类的无参数构造函数执行

我们发现实例化一个子类的对象,也就是调用了子类的构造方法,为什么父类的无参数构造方法也执行了,并在子类构造方法执行之前就已经执行了父类的无参数构造方法,好奇怪。

刚刚在上面的super关键字的使用第6点,我已经说了,super()和this()方法一样,都只能在构造方法的第一行出现。我们猜想,难道子类的构造方法第一行有一个隐形的super()方法?答案是肯定的。

我们把子类的构造方法的第一行给它加上super():

//子类,Cat类
class Cat extends Animal{
    //构造函数
    public Cat() {
        super();
        System.out.println("Cat类的无参数构造函数执行");
    }
}

再执行下面代码:

Cat c1 = new Cat(); 

运行输出结果为:

    Animal类的无参数构造函数执行
    Cat类的无参数构造函数执行

和刚才的子类构造方法没加super()是一样的。

所以说当子类的构造方法内第一行没有出现“super()”时,系统会默认给它加上无参数的"super()"方法。

阅读仔细的人会发现,为什么是没有“this()和super()”就写上“super()”?有“this()”就不能写上“super()”吗?那我问你,当构造方法第一行有"this()"时,你还能手动添加“super()”吗?显然不行,因为“this()”也只能出现在第一行,你不能在它前面写任何代码。所以我们又得出一个结论:构造方法中“this()”和“super()”不能同时出现,也就是“this()”和“super()”都只能出现在构造方法的第一行。

上面谈的都是无参数的“super”方法,我们也可以在构造方法的第一行使用有参数的“super(父类构造函数的参数列表)”,但值得注意的是,当子类构造方法执行有参数的“super(参数列表)”方法,你得确保父类中也有对应的有参数构造方法,不然会编译报错。同样我要提醒一下,当子类构造方法的第一行执行super()无参数方法,那么父类中一定要有无参数构造方法,有的人可能会在父类中写了有参数的构造方法,却忽略了写无参数构造方法,那么在子类构造方法内就会报错,因为当你在一个类中写了有参数的构造方法时,无参数构造方法就会不存在,你需要自己补上无参数的构造方法,这是一个良好的编程习惯。

无论你子类构造方法有没有“this()”和“super()”方法,实例化子类对象一定一定会执行对应的父类构造方法,即不管实例化了一个怎样的孩子,它一定会先实例化一个对应的父亲。

下面给道例题练习一下this()和super()方法:

public class MyTest {
	
	public static void main(String[] args) {
		new Cat(); 
	}
}

//父类,Animal类
class Animal {
	//构造函数
	public Animal() {
		super();
		System.out.println("1:Animal类的无参数构造函数执行");
	}
	public Animal(int i) {
		super();
		System.out.println("2:Animal类的有int参数构造函数执行");
	}
}

//子类,Cat类
class Cat extends Animal{
	//构造函数
	public Cat() {
		this("");
		System.out.println("3:Cat类的无参数构造函数执行");
	}
	public Cat(String str) {
		super(5);
		System.out.println("4:Cat类的有String参数构造函数执行");
	}
}

输出结果为:

2:Animal类的有int参数构造函数执行
4:Cat类的有String参数构造函数执行
3:Cat类的无参数构造函数执行

我们又可以得出一个结论:不管你创建什么对象,Object对象的无参数构造方法一定会先执行,因为Object是所有类的根类。

说了这么多,super()到底什么时候使用?来看下面代码:

public class MyTest {
	
	public static void main(String[] args) {
		Cat c1 = new Cat(3); 
		System.out.println("名字:" + c1.getName() + ",年龄:" + c1.getAge());
	}
}

//父类,Animal类
class Animal {
	//私有属性:名字
	private String name;
	
	//setter and getter
	public void setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	
	//构造函数
	public Animal() {
		
	}
	public Animal(String name) {
		this.name = name;
	}
}

//子类,Cat类
class Cat extends Animal{
	//私有字段:年龄
	private int age;
	
	//setter and getter
	public void setAge(int age) {
		this.age = age;
	}
	public int getAge() {
		return age;
	}
	
	//构造函数
	public Cat() {
		
	}
	public Cat(int age) {
		this.age = age;
	}
}

输出结果:名字:null,年龄:3

我们也知道,没有给c1的name赋值嘛,当然为默认值null啦。

确实如此,所以我们给Cat加一个构造方法,给name和age都赋值。

如下:

public Cat(String name, int age) {
    this.name = name; //报错
    this.age = age
}

显然这样做是会报错的,因为name已经被父类封装成private的了,不能直接访问,可能有的人会这样做:

public Cat(String name, int age) {
    setName(name);
    this.age = age;
}

显然这样做的确可以做到给父类的name赋值,但这样做是不建议的,我们在构造方法中通常只调用构造方法,不会去调用实例方法,况且当不止一个变量时,用set方法时,我们就要调用好多个实例方法去完成多个变量的赋值。这时候为什么不考虑使用super()方法呢?如下:

public Cat(String name, int age) {
    super(name);
    this.age = age;
}

这样就显得文雅,美观多了。

总结:

1、this和super一样,都是对象内部的引用变量,只能出现在对象内部;

2、 this指向当前对象自己,super指向当前对象的父类型特征,故this的东西比super多,也就是super是this的一部分;

3、 this()和super()都只能出现在构造方法的第一行,故this()和super()方法不能共存,当一个类的构造方法第一行中没有this(),也没有super(),系统默认有super()方法;

4、this()是构造方法中调用本类其他的构造方法,super()是当前对象构造方法中去调用自己父类的构造方法。

到此这篇关于Java中super关键字介绍以及super()使用的文章就介绍到这了,更多相关Java super关键字使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中super关键字介绍以及super()的使用

本文链接: https://www.lsjlt.com/news/162865.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中super关键字介绍以及super()的使用
    目录1、super的使用:2、先复习一下this关键字的使用。3、super关键字:总结:1、super的使用: (1)super是一个关键字。 (2)super和this很类似,我...
    99+
    2022-11-13
  • Java中super关键字怎么使用
    这篇文章主要讲解了“Java中super关键字怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中super关键字怎么使用”吧!supersuper是一个关键字,全部小写。sup...
    99+
    2023-07-02
  • Java super关键字怎么使用
    本文小编为大家详细介绍“Java super关键字怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java super关键字怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.s...
    99+
    2023-07-02
  • 如何使用Java中的Super关键字
    本篇内容主要讲解“如何使用Java中的Super关键字”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Java中的Super关键字”吧!一、重写父类方法什么是重写父类方法在继承关系中,子类...
    99+
    2023-06-15
  • java中的super关键字怎么使用
    在Java中,super是一个关键字,用于引用父类的成员变量、成员方法和构造方法。1. 引用父类的成员变量:可以使用super关键字...
    99+
    2023-08-08
    java super
  • Java中super关键字怎么用
    本篇内容介绍了“Java中super关键字怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!super有什么用?(1)当子类中构造方法第一...
    99+
    2023-06-29
  • Java super关键字的使用详解
    目录1.super介绍2.super的基本使用3.子类和父类方法的调用细节4.super和this的区别1.super介绍 我们可以通过super关键字来实现对父类成员的访问,用来引...
    99+
    2022-11-13
  • 如何使用Java的super关键字
    这篇文章给大家分享的是有关如何使用Java的super关键字的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java的super关键字当子类重写父类的方法后,子类对象将无法直接访问父类被重写的方法。为了解决这个问题...
    99+
    2023-06-15
  • super关键字如何在Java中使用
    super关键字如何在Java中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 java方法重写和super关键字  在继承中,其实就是...
    99+
    2023-05-31
    java ava super
  • java中super关键字有什么用
    在Java中,super关键字有以下几种用途:1. 调用父类的构造方法:在子类的构造方法中,可以使用super关键字来调用父类的构造...
    99+
    2023-08-24
    java super
  • Java中this和super关键字的使用详解
    目录父类空间优先于子类对象产生super和this的含义super和this的用法继承的特点父类空间优先于子类对象产生 在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。...
    99+
    2022-11-13
    Java this super关键字 Java this关键字 Java super关键字
  • java中this与super关键字的使用方法
    java中this与super关键字的使用方法这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~thisthis是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。this...
    99+
    2023-05-31
    java this super
  • Java super关键字的使用方法详解
    构造方法中的super关键字在Java子类的构造方法中可以通过super关键字来调用父类的构造方法。其用法为: 1) super(); 访问父类中的无参构造函数 2) super (paras…); 访问父类中的成员函数yyy super(...
    99+
    2023-05-31
    java super ava
  • Java中super关键字的用法和细节
    目录前言 1. super关键字的用法2. super关键字的使用细节3. super和this关键字的比较总结前言     因为西...
    99+
    2022-11-12
  • 详解怎么用Java的super关键字
    Java的super关键字 当子类重写父类的方法后,子类对象将无法直接访问父类被重写的方法。为了解决这个问题,在Java中专门提供了一个super关键字来访问父类的成员,例如访问父类...
    99+
    2022-11-12
  • Java的this和super关键字怎么用
    本文小编为大家详细介绍“Java的this和super关键字怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java的this和super关键字怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、“ t...
    99+
    2023-06-30
  • Java中super关键字的用法和细节是什么
    这篇文章将为大家详细讲解有关Java中super关键字的用法和细节是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种...
    99+
    2023-06-26
  • Java关键字详解之final static this super的用法
    目录1. final 关键字:2. static 关键字:3. this 关键字:4. super 关键字:final,static,this,super 关键字总结 正文开始@A...
    99+
    2022-11-12
  • 谈谈Java中对象,类和this,super,static关键字的使用
    目录Java对象究竟是什么创建对象的过程创建多个对象时,内存的变化无处不在的this和super关键字static关键字 为何如此特殊Java对象究竟是什么 对象:对象是类的一个实例...
    99+
    2022-11-13
    Java 对象 类 关键字 Java 对象 Jav 类 Java 关键字 Java this super static
  • Java中的super关键字_动力节点Java学院整理
    一、super关键字  在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用super来引...
    99+
    2023-05-31
    java super 关键字
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作