一;基本介绍
二:基本语法
- 访问父类的属性,但不能访问父类的private属性 super.属性名; ```java class Person{ int n1 = 100; }
class men extends Person{ int n1 = 200; }
class student extends men{ int n1 = 300;
public void test00(){
System.out.println(super.n1);
}
}
2. **访问父类的方法,不能访问父类的private方法 _super.方法名(参数列表);_**
```java
public static void main(String[] args) {
student student = new student();
student.test00();
}
class Person{
}
class men extends Person{
public void eat(){
System.out.println("man 中的eat方法");
}
}
class student extends men{
public void test00(){
super.eat();
}
}
访问父类的构造器: super(参数列表);只能放在构造器的第一句,只能出现一句! ```java public static void main(String[] args) { student student = new student(); student.test00(); } class Person{ String name; public Person() {
} public Person(String name) {
this.name = name;
} } class men extends Person{ int age;
public men(String name, int age) {
super(name);
this.age = age;
}
}
<a name="EUZ5E"></a>
### 三:细节
- **_ 查找eat方法时 eat( ) 和 this.eat( )一样 _**
- **_先找本类,如果有,则调用_**
- **_如果没有,则找父类(如果有,并可以调用,则调用_**
- **_如果父类没有,则继续找父类的父类,整个规则,就是一样的,直到Object类_**
```java
public static void main(String[] args) {
student s = new student();
s.eat();
}
class Person{
public void eat(){
System.out.println("person 中的eat方法");
}
}
class men extends Person{
public void eat(){
System.out.println("man 中的eat方法");
}
}
class student extends men{
public void test00(){
super.eat();
}
}
- 查找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()”); }
public void test00(){
super.eat();
//会报错:父类都没有eat方法,就算子类有也不会返回
//因为super是直接去找父类
}
}
四:super和this比较
所有就撒到个fdfafafafafda不应该吧所有十五交给他们来实现dad