一;基本介绍

super代表父类的使用,用于访问父类的属性,方法,构造器

二:基本语法

  1. 访问父类的属性,但不能访问父类的private属性 super.属性名; ```java class Person{ int n1 = 100; }

class men extends Person{ int n1 = 200; }

class student extends men{ int n1 = 300;

  1. public void test00(){
  2. System.out.println(super.n1);
  3. }

}

  1. 2. **访问父类的方法,不能访问父类的private方法 _super.方法名(参数列表);_**
  2. ```java
  3. public static void main(String[] args) {
  4. student student = new student();
  5. student.test00();
  6. }
  7. class Person{
  8. }
  9. class men extends Person{
  10. public void eat(){
  11. System.out.println("man 中的eat方法");
  12. }
  13. }
  14. class student extends men{
  15. public void test00(){
  16. super.eat();
  17. }
  18. }
  1. 访问父类的构造器: super(参数列表);只能放在构造器的第一句,只能出现一句! ```java public static void main(String[] args) { student student = new student(); student.test00(); } class Person{ String name; public Person() {

    } public Person(String name) {

    1. this.name = name;

    } } class men extends Person{ int age;

    public men(String name, int age) {

    1. super(name);
    2. this.age = age;

    }

}

  1. <a name="EUZ5E"></a>
  2. ### 三:细节
  3. - **_ 查找eat方法时 eat( ) 和 this.eat( )一样 _**
  4. - **_先找本类,如果有,则调用_**
  5. - **_如果没有,则找父类(如果有,并可以调用,则调用_**
  6. - **_如果父类没有,则继续找父类的父类,整个规则,就是一样的,直到Object类_**
  7. ```java
  8. public static void main(String[] args) {
  9. student s = new student();
  10. s.eat();
  11. }
  12. class Person{
  13. public void eat(){
  14. System.out.println("person 中的eat方法");
  15. }
  16. }
  17. class men extends Person{
  18. public void eat(){
  19. System.out.println("man 中的eat方法");
  20. }
  21. }
  22. class student extends men{
  23. public void test00(){
  24. super.eat();
  25. }
  26. }
  • 查找eat方法时 super.eat( )是直接查找父类;
    • 如果父类有,则调用
    • 如果父类没有,但是子类有,也不会返回调用子类,直接报错 ```java public static void main(String[] args) { student s = new student(); s.test00(); } class Person{ public void eat(){ System.out.println(“person 中的eat方法”); } }

class men extends Person{

} class student extends men{ public void eat(){ System.out.println(“studnet中的eat()”); }

  1. public void test00(){
  2. super.eat();
  3. //会报错:父类都没有eat方法,就算子类有也不会返回
  4. //因为super是直接去找父类
  5. }

}

```

四:super和this比较

image.png
所有就撒到个fdfafafafafda不应该吧所有十五交给他们来实现dad