六、继承 Inheritance
6.1
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
extends:扩展。子类(派生类)是父类(基类)的扩展。
继承是类与类之间的关系。
java中只有单继承,没有多继承:一个儿子只能有一个爸爸,一个爸爸可以有多个儿子。
Inheritance>Application & Person & Student
package Inheritance;public class Application {public static void main(String[] args) {Student student = new Student();student.say();System.out.println(student.money1);System.out.println(student.money2);//System.out.println(student.money3);//私有的,不属于子类}
}
package Inheritance;//人
public class Person {//publicpublic int money1 = 100_0000;//defaultint money2 = 200_0000;//protected//privateprivate int money3 = 10_0000_0000;public void say(){System.out.println("说了一句话");}}
package Inheritance;//学生 是 人 派生类、子类
//子类继承了父类,就会拥有父类的全部方法(public)
public class Student extends Person {}
ctrl+h,打开层次结构:
在java中,所有类都默认直接或间接继承Object类
6.2 super
Inheritance>Application & Person & Student
package Inheritance;public class Application {public static void main(String[] args) {Student student = new Student();student.test1("name in test");student.test2();}
}
package Inheritance;//人
public class Person {//protectedprotected String name = "name in Person";public void print(){System.out.println("Person");}//alt+insert-->构造函数-->无选择public Person() {System.out.println("Person无参执行了");}
}
package Inheritance;public class Student extends Person {private String name = "name in Student";public void test1(String name){System.out.println(name);//name in testSystem.out.println(this.name);//name in StudentSystem.out.println(super.name);//name in Person}public void print(){System.out.println("Student");}public void test2(){print();//Studentthis.print();//Studentsuper.print();//Person}public Student() {//隐藏代码:调用了父类的无参构造//super();//且调用父类的构造器必须要在子类无参构造器的第一行//this("Hello");//如果调用子类自己的有参构造器,也必须要在子类无参构造器的第一行,且子类的有参构造器和父类构造器只能调用一个System.out.println("Student无参执行了");}
}
输出顺序是:
Person无参执行了
Student无参执行了
name in test
name in Student
name in Person
Student
Student
Person
Note:
- super是调用父类的构造方法,必须在构造方法的第一个;
- super必须只能出现在子类的方法或者构造方法中;
- super和this不能同时调用构造方法;
vs. this:
- 代表的对象不同:
this:本身调用着这个对象;
super:代表父类对象的引用。
- 前提:
this:没有继承也可以使用;
super:只能在继承条件下才可以使用
- 构造方法:
this():本类的构造;
super():父类的构造