2022-10-02 16:27:38
super
super代表的是“当前对象(this)”的父类型特征
概念
1、super是一个关键字,全部小写。
2、super和this对比着学习。
this:
this能出现在实例方法和构造方法中。
this的语法是:”this.“,”this()“
this不能使用在静态方法中。
this.大部分情况下是可以省略的
⭐this.在区分局部变量和实例变量的时候不能省略。
public class setName(String name){ this.name=name; } //此时不能省略
this()只能出现在构造方法第一行,通过当前的构造方法去调用”本类“中其他的构造方法,目的是:代码复用
super:
super只能出现在实例方法和构造方法中。
super的语法是:”super.“,”super()“
super不能使用在静态方法中。
super.大部分情况下是可以省略的
⭐super.在???的时候不能省略。
父类和子类中有同名属性,或者说同样的方法,
想在子类中访问父类的,super.,不能省略。
super()只能出现在构造方法第一行,通过当前的构造方法去调用”父类“中其他的构造方法,目的是:创建子类对象的时候,先初始化父类特征
3、super()
表示通过子类的构造方法调用父类的构造方法
模拟现实生活中的这种场景:要想有儿子,需要先有父亲
4、重要结论:
当一个构造方法第一行:
既没有this()有没有super()的话,默认会有一个super();
表示通过当前子类的构造方法调用父类的无参数构造方法。
所以必须保证父类的无参数构造方法是存在的。(建议手动添加)
5、this()和super()不能共存,他们都只能出现在构造方法第一行
6、无论怎样,父类的构造方法是一定会执行的。(百分百的)
public class SuperTest{ public static void main(String [] args){ new C(); } } class A{ public A(){ Systemm.out.println("A的无参数构造执行1"); } } class B extends A{ public B(){ System.out.println("B的无参数构造执行2"); } public B(String name){ System.out.println("B的有参数构造执行(String)3"); } } class C extends B{ public C(){
this("zhangsan"); System.out.println("C的无参数构造执行4"); } public C(String name){
this(name,20); System.out.println("C的有参数构造执行(String)5"); } public C(String name,int age){
super(name); System.outt.println("C的有参数构造执行(String,int)6"); } }
执行结果:
A的无参数构造执行1
B的有参数构造执行(String)3
C的有参数构造执行(String,int)6
C的有参数构造执行(String)5
C的无参数构造执行4
在Java语言中不论是new什么对象,最后老祖宗的Object类的无参数构造方法一定会执行。(Object类的无参数构造方法是处于”栈顶部位“(最后调用,最先执行结束))
用法
利用super(String a,double b)实现对父类私有变量在子类的构造方法中的赋值。
标签:String,构造方法,学习,println,super,public,name From: https://www.cnblogs.com/gbrr/p/16747903.html