Java小白入门200例83之Java super关键字详解

Posted 编程界明世隐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java小白入门200例83之Java super关键字详解相关的知识,希望对你有一定的参考价值。

作者简介

作者名:编程界明世隐
简介:CSDN博客专家,从事软件开发多年,精通Java、javascript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞!

引言

很多Java初学者问我,新手明明很用心、很努力学习的Java知识,转头又忘记了,很让人犯愁,小白如何能够快速成长、成为大牛呢?
其实要成为大神的技巧只有一个:“多学多练”,于是明哥就整理了比较典型的练习实例,通过练习能够快速提升编码技巧和熟练度,让你在成为大佬的路上一去不复返(切记要亲手练习哦)!

导航

✪ Java小白入门200例系列目录索引
◄上一篇  82.Java实现多继承
►下一篇待更新     

概述

由于子类不能继承父类的构造方法,因此,如果要调用父类的构造方法,可以使用 super 关键字。super 可以用来访问父类的构造方法、普通方法和属性。

super 关键字的功能:

  1. 在子类的构造方法中显式的调用父类构造方法
  2. 访问父类的成员方法和变量。

调用父类构造方法

实例1

父类A和子类B(未用到super)

package demo.demo83;
//父类
public class A {
	
}
package demo.demo83;
//子类B
public class B extends A {

}

实例2

在B类中加入构造函数,并调用super

package demo.demo83;
//子类B
public class B extends A {

	public B(){
		super();
	}
}

此时的super() 调用的就是A类默认的构造方法,我们自己来写一下A类默认的构造,让其看的更清楚。

实例3

更清晰的看到父类A的构造在子类中可以通过super来调用。

package demo.demo83;
//父类
public class A {
	public A(){
		System.out.println("A构造被调用");
	}
}
package demo.demo83;
//子类B
public class B extends A {

	public B(){
		super();
	}
	
	public static void main(String[] args) {
		//实例化B
		new B();
	}
}

运行一下:

A构造被调用

实例4

调用有参的父类构造。

  1. 父类A
package demo.demo83;
//父类
public class A {
	public A(){
		System.out.println("A构造被调用");
	}
	public A(String name){
		System.out.println("A有参构造被调用,参数值为:"+name);
	}
}
  1. 子类B
package demo.demo83;
//子类B
public class B extends A {

	public B(){
		super();
	}
	public B(String name){
		super(name);
	}
	public static void main(String[] args) {
		//根据有参的构造来实例化B
		new B("小geigei");
	}
}
  1. 运行结果

A有参构造被调用,参数值为:小geigei

访问父类成员

当子类的成员变量或方法与父类同名时,可以使用 super 关键字来访问。
给父类和子类分别定义一个属性 n ,并在B类中访问它。

package demo.demo83;
//父类
public class A {
	int n = 10;//定义一个属性
	
	public A(){
		System.out.println("A构造被调用");
	}
	public A(String name){
		System.out.println("A有参构造被调用,参数值为:"+name);
	}
}
package demo.demo83;
//子类B
public class B extends A {
	int n = 20;//定义一个属性
	
	public B(){
		super();
	}
	public B(String name){
		super(name);
		System.out.println("父类属性n:"+super.n);
	}
	public static void main(String[] args) {
		//根据有参的构造来实例化B
		new B("小geigei");
	}
}

运行结果:

A有参构造被调用,参数值为:小geigei
父类属性n:10

调用成员方法

当父类和子类都具有相同的方法名时,可以使用 super 关键字访问父类的方法。
在父类A和子类B中分别加入sayHello方法

package demo.demo83;
//父类
public class A {
	int n = 10;//定义一个属性
	
	public A(){
		System.out.println("A构造被调用");
	}
	public A(String name){
		System.out.println("A有参构造被调用,参数值为:"+name);
	}
	
	public void sayHello() {
		System.out.println("父类A说:你好呀");
	}
}
package demo.demo83;
//子类B
public class B extends A {
	int n = 20;//定义一个属性
	
	public B(){
		super();
	}
	public B(String name){
		super(name);
		super.sayHello();
	}
	
	public void sayHello() {
		System.out.println("子类B说:你好呀");
	}
	public static void main(String[] args) {
		//根据有参的构造来实例化B
		new B("小geigei");
	}
}

运行结果:

A有参构造被调用,参数值为:小geigei
父类A说:你好呀

super和this

this 指的是当前对象的引用,super 是当前对象的父对象的引用。

将上述实例的B类稍作改造,加入一行代码 this.sayHello()。

package demo.demo83;
//子类B
public class B extends A {
	int n = 20;//定义一个属性
	
	public B(){
		super();
	}
	public B(String name){
		super(name);
		super.sayHello();
		this.sayHello();
	}
	
	public void sayHello() {
		System.out.println("子类B说:你好呀");
	}
	public static void main(String[] args) {
		//根据有参的构造来实例化B
		new B("小geigei");
	}
}

运行结果如下:

A有参构造被调用,参数值为:小geigei
父类A说:你好呀
子类B说:你好呀

使用 super 关键字访问父类中与子类同名的方法sayHello,this 关键字访问本类的sayHello方法。

小结

这节总结了“ Java super关键字详解 ”,希望能对大家有所帮助,请各位小伙伴帮忙 【点赞】+【收藏】+ 【评论区打卡】, 如果有兴趣跟小明哥一起学习Java的,【关注一波】不迷路哦。

评论区打卡一波让我知道你,明哥会持续关注你的学习进度哦!

导航

✪ Java小白入门200例系列目录索引
◄上一篇  82.Java实现多继承
►下一篇待更新     

热门专栏推荐

1.Java小游戏系列(俄罗斯方块、飞机大战、植物大战僵尸等)
2.JavaWeb项目实战(图书管理、在线考试、宿舍管理系统等)
3.JavaScript精彩实例(飞机大战、扫雷、贪吃蛇、验证码等)
4.Java小白入门200例
5.从零学Java、趣学Java、以王者荣耀角度学Java

以上是关于Java小白入门200例83之Java super关键字详解的主要内容,如果未能解决你的问题,请参考以下文章

Java小白入门200例95之Java匿名类

Java小白入门200例105之Java ArrayList类

Java小白入门200例107之Java LinkedList类

Java小白入门200例112之Java HashSet类

Java小白入门200例99之Java常见异常及处理

Java小白入门200例109之Java Map集合详解