继承super-this
继承
继承的本质时对某一批类的抽象
extends意思为扩展,子类是父类的扩展
java中类只有单继承,没有多继承。子类只有一个父类,一个父类可以有多个子类
子类继承了父类,就会拥有父类的所有方法
package OOP02.Demon2;
public class Person {
public void say(){
System.out.println("喵了一声");
}
private int money = 100;//父类私有
}
package OOP02.Demon2;
//学生继承了Person
public class Student extends Person{
//学生方法为空
}
package OOP02.Demon2;
public class Aplication {
public static void main(String[] args) {
Student student = new Student();
student.say(); //喵了一声
// System.out.println(student.money);这句话则会报错,因为money为父类私有,没有继承给字类
}
}
Application中可以直接调用student.say(),Student继承了Person的方法。
父类私有的属性子类无法继承。
ctrl+h可以查看继承的关系。
在java中所有的类都默认直接或间接继承了object类。
super
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法、构造方法中(不可能调到object去对吧)
- super和this不能同时调用构造方法,因为二者都要求写在构造器的第一行。
通过下面代码实践更好地理解:(Student是Person的子类,因为学生属于人嘛)
从程序理解super
父类↓Person
package OOP02.Demon2;
public class Person {
protected String name = "阳";
public Person() {
System.out.println("父构造运行");
}
//若此处使用有参构造器则无参构造器消失,
//子类的无参构造器由于需要调用父类无参构造器,
//会导致子类无参构造器报错!!
/*
若此处只是用有参构造器器
为了子类无参构造器能够运行
需要在super()中调用父类有参构造器!!
如果super()不写默认调用无参!!
*/
//########################################
public void print(){
System.out.println("Person");
}
}
子类↓Student
package OOP02.Demon2;
//学生继承了Person
public class Student extends Person{
public Student() {
//这里有一句隐藏代码,super(),调用了父类的1
super();
//调用父类的构造器必须在子类构造器的第一行
System.out.println("子构造运行");
}
public String name = "林";
public void name(String name){
System.out.println(name);// 形式参数name
System.out.println(this.name);//学生类定义的name
System.out.println(super.name);//父类定义的name
}//##################################################
public void print(){
System.out.println("Student");}
public void text(){
print(); //学生类里的
this.print();//学生类里的
super.print();//人 类里的
//注意若父类方法为私有的super也无法调用
}
}
调试↓Application
package OOP02.Demon2;
public class Aplication {
public static void main(String[] args) {
Student student = new Student();
student.name("fa");
/*
结果为fa
林
阳
*/
//#######################################################
student.text();
/*结果为
Student
Student
Person
*/
}
}
super与this的对比
(指)代表的(具体)对象不同:
this:本身调用者的对象
super:代表父辈对象的应用
前提不同:
this:没有继承也可以使用,因为只涉及类本身
super:只能继承条件下使用,你得有个爹才能调用爹
构造方法不同:
this():本类的构造?????有什么用?????????
super():父类的构造
浙公网安备 33010602011771号