关于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);//传参的nameSystem.out.println(this.name);//当前类的nameSystem.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 关闭项目结构