关于java中的Super详解

发布时间:2024年01月19日

关于java中的Super详解

我们在上一篇文章中了解到了面向对象三大基本特征,继承,我们本篇文章中来了解一下Super😀。

一、Super和this调用属性

  • this:当前类中使用。
  • super:父类使用。

我们直接用代码来说明一下。

1、首先我们新建一个人类,一个学生类,然后让学生类去继承人类。

//人类
public class Person
{
	
}
//学生类
public class Student extends Person
{

}

2、我们在父类(人类)中,定义一个属性,用受到保护修饰符protected去声明一个名字name,然后在学生类(子类)里面声明一个私有属性name,并且在学生类(子类)定义一个方法去输出名字。

//人类
public class Person
{
	protected String name="xiaoming";
}
//学生类
public class Student extends Person
{
	private String name="ming";
    
    public void test(String name)
    {
        System.out.println(name);//传参的name
        System.out.println(this.name);//当前类的name
        System.out.println(super.name);//父类的name
    }
}

3、我们用main方法调用一下,创建学生类的对象。

public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.test("羊");
    }
}

我们执行以下输出结果,可以发现,输出的东西也是我们定义属性赋值的内容。

羊
ming
xiaoming

进程结束.......

二、Super和this调用方法

1、我们在学生类和人类中,都定义一个输出的方法。

//人类
public class Person {

    protected String name="xiaoming";

    public void print()
    {
        System.out.println("Person");
    }
}
//学生类
public class Student extends Person
{
    private String name="ming";

    public void print()
    {
        System.out.println("Student");
    }

    public void test(String name)
    {
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }

    public void test1()
    {
        print();//当前类中的方法,但是不建议这样去写,因为会分不清
        this.print();//当前类中的方法
        super.print();//父类中的方法
    }
}

3、我们用main方法调用一下。

public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.test1();
    }
}

4、我们执行以下输出结果。

Student
Student
Person

进程结束.....

5、如果把父类(人类)中的方法换成私有的方法,就会无法被调用,因为私有的东西无法被继承

三、隐藏的代码

我们在学构造器的时候,知道无参构造是被隐藏的,但是我们这里给它写出来,然后输出一句话,学生类和人类都写出来。

  • ALT+INS(快捷键)
//人类
public class Person {

    public Person() {
        System.out.println("Person无参执行");
    }
}

//学生类
public class Student extends Person
{
	 public Student() 
     {
        //隐藏代码:调用了父类的无参
        super();
        //调用父类构造器必须放在子类构造器的第一行
        System.out.println("Student无参执行");
    }
}

我们在main方法中只创建对象然后直接执行。

public class Application {
    public static void main(String[] args) {
        Student student = new Student();
    }
}
Person无参执行
Student无参执行

进程结束......
  • 所以,隐藏代码调用了父类的无参(super();)
  • 调用父类构造器必须放在子类构造器的第一行。
  • 不写也可以,这里只是展示一下隐藏代码的样子😊。
  • 在父类中写了有参构造,必须要写出无参构造,如果不在父类写出无参,默认隐藏调用是无参,会导致程序报错。

四、super和this注意点

  • super

1、super调用父类的构造方法,必须在构造方法的第一个

2、super 必须只能出现在子类的方法或者构造方法中!

3、super和 this 不能同时调用构造方法!

  • this

1、代表的对象不同:

this:本身调用者这个对象

super: 代表父类对象的应用前提

2、没有继承也可以使用this

3、super:只能在继承条件才可以使用构造方法。

4、this();本类的构造

5、super();父类的构造

五、idea向右拆分

在这里插入图片描述

我们可以点击页面,右键,向右拆分或者向左拆分,来把代码分页,这样比较方便大家观看😊

  • ALT+1 关闭项目结构
文章来源:https://blog.csdn.net/SpringYang11/article/details/135706360
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。