/* 从父类中去查找,引用父类的xx
要求:super只能方法在子类中可见的属性、方法、构造器,私有的不行
用法:

1、super.属性

当子类声明了和父类同名的属性时,可以使用super.属性来访问父类的属性
2、super.方法
当在子类中需要调用父类被重写的方法时,可以使用super.方法
3、super()或者super(实参列表)
super();调用父类的无参构造
super(实参列表):调用父类的有参构造
**注意:
(1)super()或super(实参列表)必须在子类构造器的首行
(2)如果子类的构造器中,没有写super(),它也存在,但是如果子类构造器中写super(实参列表),那么super()就不会存在的**

*/
啥也不说了,我们来贴代码:
最好的例子,看他们的输出结果

public class TestSuper {
public static void main(String[] args) {
B b=new B();
b.printNum(5);
}
}
class A{
int num=1;
}
class B extends A{
int num=2;
public void printNum(int num){
System.out.println(num);//局部变量(int num)
System.out.println(this.num);//成员变量
System.out.println(super.num);
}
}

别以为就完了,我们继续唠嗑

0005super的理解_java


啥也不说了,贴代码,细品super的超级牛逼之处

package com.atguigu.test02;


/*
* super:
从父类中去查找,引用父类的xx
要求:super只能方法在子类中可见的属性、方法、构造器,私有的不行
用法:
1、super.属性
当子类声明了和父类同名的属性时,可以使用super.属性来访问父类的属性

2、super.方法
当在子类中需要调用父类被重写的方法时,可以使用super.方法

3、super()或者super(实参列表)
super();调用父类的无参构造
super(实参列表):调用父类的有参构造

注意:
(1)super()或super(实参列表)必须在子类构造器的首行
(2)如果子类的构造器中,没有写super(),它也存在,但是如果子类构造器中写super(实参列表),那么super()就不会存在的

*/

public class TestSuper {
public static void main(String[] args) {
B b=new B();
b.printNum(5);
}
}
class A{
int num=1;
}
class B extends A{
int num=2;
public void printNum(int num){
System.out.println(num);//局部变量(int num)
System.out.println(this.num);//成员变量
System.out.println(super.num);
}
}
class Human{
private String name;
private int age;
public Human() {
super();
}
public Human(String name, int age) {
super();
this.name = name;
this.age = age;

}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getInfo(){
return "姓名"+name+", 年龄"+age;
}
}
class XueSheng extends Human{
private int score;

//重点来了
public XueSheng(String name, int age,int score) {
super(name,age);//直接调用父类的Human的有参构造
this.score = score;
}
public XueSheng(){
//调用父类Human的无参构造
}
public int getScore(int score){
return score;
}
public void setScore(int score){
this.score=score;
}
public String getInfo(){
//return "姓名:"+getName()+" ,年龄:"+getAge()+" ,成绩:"+score;//本来是可以这样写的,但是我们得学会偷懒,所以换成下面的写法
return super.getInfo() + " ,成绩:"+score;
}
}

二、super的常用场景:默认是调用父类的无参构造,那么我们怎么调用父类的有参构造呢

0005super的理解_子类_02

package com.atguigu.test02.polymorphism;

public class Super2调用父类的有参构造 {
public static void main(String[] args) {
int age=20;
Dog2 dog=new Dog2(age);

}
}
//父类——动物
class Animal2{
public int age = 10;
public String name;
public void eat(){
System.out.println("动物bai具有吃东du西的zhi能力");
}
public Animal2(int age){
this.age = age;
System.out.println("Animal类构造方法执行了");
}
}

//子类——狗
class Dog2 extends Animal2{
public int age =20;
public void eat(){
System.out.println("狗具有吃骨头的能力");
}
public Dog2(int age){
super(age);//显式调用父类(动物)的有参数构造方法
System.out.println("Dog类构造方法执行了");
}
}
``