super详解
Posted H.「俠」
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了super详解相关的知识,希望对你有一定的参考价值。
super注意点
-
super调用父类构造方法,必须只能出现在子类构造方法中!构造方法!构造方法!
-
super调用父类构造方法时,必须在子类构造方法体代码的第一行!第一行!第一行!
-
super()与this()不能同时存在,他们都得放在方法体代码第一行,“一山不容二虎”
-
代码示例:
-
public Students() {
// this("you");//子类调用自己有参构造器(注意不能同时再调用父类构造器,一“行”不容二码)
super();//隐藏代码(默认调用无参父类构造器,可不写),调用父类无参构造器,且必须放在构造方法体代 码第一行
System.out.println("先调用父类构造器,然后打印Students无参构造器");
}
super VS this
-
代表的对象不同
-
this代表本身调用者这个对象
-
调用类对象本身的方法
public void setName(String name) {// Alt + Ins
this.name = name;
this.study("lee");
}
public void study(String name){
// this.name = name; //给Students的name属性重新赋值
System.out.println("study中 .......");
System.out.println("传入的name属性参数:" + name);//name:传入的参数
System.out.println("this: "+this.name+"努力学习");//this.name:当前类的name属性
System.out.println("super:"+ super.name + "qinjiang老师努力的教");//super.name:父类的name属性
}
-
调用类对象本身的属性
-
-
super代表父类对象的引用
-
代码示例:
public Students(String name) {
super(name);//调用父类有参构造方法
this.name = name ;
super.print();//调用父类方法
} -
-
-
前提也不一样
-
this:在没有继承的时候也可以使用
-
super:必须有继承关系,继承条件下才可以在子类中使用
-
-
调用构造方法不同
-
this:调用本类的构造方法
-
普通调用:
public Students() {
this("you");//子类调用自己有参构造器(注意不能同时再调用父类构造器)
// super();//隐藏代码(默认调用无参父类构造器,可不写),调用父类无参构造器,且必须放在构造方法体代码第一行
System.out.println("先调用父类构造器,然后打印Students无参构造器");
}
public Students(String name) {
super(name);
this.name = name ;
super.print(); -
进阶调用:
public class Students extends Person{ //子类Students继承了父类Person
private String name ; //私有化name属性,只能在该类的方法或者构造方法中调用
public int age ;
public Students() {
this("you");//子类调用自己有参构造器(注意不能同时再调用父类构造器)
// super();//隐藏代码(默认调用无参父类构造器,可不写),调用父类无参构造器,且必须放在构造方法体代码第一行
System.out.println("先调用父类构造器,然后打印Students无参构造器");
}
public Students(String name) {
// super(name);
this("lee",18);
//// super();
this.name = name ;
// super.print();
}
public Students(String name,int age){
this.name =name;
this.age = age;
System.out.println(this.name+"有"+this.age+"岁了吧");
}
public void setName(String name) {// Alt + Ins
this.name = name;
}
public void study(String name){
// this.name = name; //给Students的name属性重新赋值
System.out.println("study中 .......");
System.out.println("传入的name属性参数:" + name);//name:传入的参数
System.out.println("this: "+this.name+"努力学习");//this.name:当前类的name属性
System.out.println("super:"+ super.name + "qinjiang老师努力的教");//super.name:父类的name属性
} -
-
-
以上是关于super详解的主要内容,如果未能解决你的问题,请参考以下文章