前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >super和this关键字的具体应用

super和this关键字的具体应用

作者头像
C_H
发布2022-11-15 14:56:19
2910
发布2022-11-15 14:56:19
举报
文章被收录于专栏:笔记c笔记c

super和this关键字的具体应用

目录

super和this关键字的具体应用

下面通过四组Child类和Test类代码,来体现super和this关键字的具体应用

一、子类默认调用父类无参构造方法

二、子类无参构造方法中默认调用父类无参构造方法

三、子类有参构造方法中默认调用父类无参构造方法

四、子类通过this()调用自己的无参构造函数


一共有三个类

  • Person(父类)
  • Child(子类)
  • Test(实例化)

Person类(代码不变)如下:

代码语言:javascript
复制
public class Person {
	private String name;
	
	public Person(){
		System.out.println("one person");
	}
	public Person(String name){
		this.name=name;
		System.out.println("one person,设置了人名");
	}
	public int Person( int i){
		return i;
	}
}

方法重载的意思是一个类中可以有多个方法具有相同的名字,即使方法类型不同,这些方法的参数必须不同,即参数的个数不同,或者参数的类型不同。

Person类对构造方法进行了重载

下面通过四组Child类和Test类代码,来体现super和this关键字的具体应用

一、子类默认调用父类无参构造方法

代码语言:javascript
复制
public class Child extends Person{
}

Child类中默认有一个父类(Person)的无参构造方法

代码语言:javascript
复制
public class Test {
	public static void main(String args[]){
	Child child =new Child();
	}
}

运行结果为:

one person

二、子类无参构造方法中默认调用父类无参构造方法

代码语言:javascript
复制
public class Child extends Person{
	public Child(){
		//super();
		System.out.println("a child");
	}
}

子类每一个构造方法的第一行都有一条默认的语句super();

代码语言:javascript
复制
public class Test {
	public static void main(String args[]){
	Child child =new Child();
	}
}

上面Child类中如果不加super();语句,系统也会默认加上,运行结果都为:

one person a child

三、子类有参构造方法中默认调用父类无参构造方法

代码语言:javascript
复制
class Child extends Person{
	private String hobby;
	public Child(String hobby){
	    //super();
		this.hobby=hobby;
		System.out.println("子类的爱好"+hobby);
	}
}
代码语言:javascript
复制
public class Test {
	public static void main(String args[]){
	Child childone =new Child("篮球");
	}
}

上面Child类中如果不加super();语句,系统也会默认加上,运行结果都为:

one person 子类的爱好篮球

四、子类通过this()调用自己的无参构造函数

代码语言:javascript
复制
class Child extends Person{
	private String hobby;
	public Child(String hobby){
	//	super();
		this();					//调用自己的构造函数,super()和this()不能同时使用
		this.hobby=hobby;
		System.out.println("子类的爱好"+hobby);
	}
	public Child(){
		super();
		System.out.println("a child");
	}
}
代码语言:javascript
复制
public class Test {
	public static void main(String args[]){
	Child childone =new Child("篮球");
	}
}

  • 上面Child类中构造函数如果不加super();语句,系统也会默认加上
  • this();语句调用自己的构造函数
  • 但是super()和this()不能同时使用

Child类中不加this();语句运行结果为:

one person 子类的爱好篮球

Child类中加上this();语句运行结果为:

one person a child 子类的爱好篮球

注意:

当父类中没有空参数的构造方法时,子类的构造方法必须通过this或者super语句指定要访问的构造方法

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • super和this关键字的具体应用
    • 下面通过四组Child类和Test类代码,来体现super和this关键字的具体应用
      • 一、子类默认调用父类无参构造方法
      • 二、子类无参构造方法中默认调用父类无参构造方法
      • 三、子类有参构造方法中默认调用父类无参构造方法
      • 四、子类通过this()调用自己的无参构造函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档