super 讲解
package com.zhan.base05Oop;
public class Test10 {
// 区别 有无 this.
// 区别 this.(指向当前类或者当前对象的属性和方法) 和 super. (指向父类的属性或者方法)
/*
super 注意点
1. super()/super(参数); 调用父类的构造器,必须要在子类构造器的第一行
2. super 关键字只能出现在子类里面而不能出现在父类里面
3. 不能同时使用 super()/ super(参数)和this()/this(参数) 来调用构造器
super VS this
1. 区别 this.(指向当前类或者当前对象的属性和方法) 和 super. (指向父类的属性或者方法)
2. this :没有继承关系也能使用
super : 必须要有继承关系,才能且只能在子类中使用
3. this()/this(参数); 调用本类的构造器
super()/super(参数); 调用父类的构造器
*/
public static void main(String[] args) {
Son1 son1 = new Son1(); // 有构造器的话,先执行父类的构造器
son1.printName("zjh");
son1.test();
}
}
class Father1 {
// 父类的构造器
public Father1(){
this(3); // 调用自身的构造器
System.out.println("这是父类的无参构造器");
}
public Father1(int a){ // 参数随便写的
System.out.println("这是父类的有参构造器");
}
protected String name="詹建海";
public void print(){
System.out.println("这是父类的方法");
}
}
class Son1 extends Father1{
// 子类的构造器
public Son1(){
// 隐藏代码 super(); :默认调用了父类的无参构造器
// super(); // 调用了父类的无参构造器,必须要在子类构造器的第一行 这里的super();可以不写,可以不说明也行
super(3); // 调用了父类的有参构造器,必须要说明才行
// 父类是有参构造器的话,子类必须写明父类的有参构造器,不然的话会报错
System.out.println("这是子类的构造器");
}
private String name="大帅哥";
public void print(){
System.out.println("这是子类的方法");
}
public void test(){ // 在方法中调用方法
print(); // 当前类的方法
this.print(); // 子类的(当前类的)方法
super.print(); // 父类的方法
}
public void printName(String name){
System.out.println(name); // 形参
System.out.println(this.name); // this. 这个类的对象的name
System.out.println(super.name); // super. 父类的 name
}
}
标签:10,子类,System,构造,讲解,父类,super,public
From: https://www.cnblogs.com/zhanjianhai/p/17103749.html