继承的本质是堆某一批类的抽象,用使用关键字 extend进行实现;
java中类只有单继承,没有多继承,即一个类可以有多个字类,但只能有一个父类
//程序入口
public class Application {
public static void main(String[] args){
Student student = new Student();
student.test("传递的名字");
}
}
//父类
public class Person {
protected String name = "父亲名字"; //受保护的属性,无法直接访问
}
//子类
public class Student extends Person {
private String name = "儿子名字";
public void test(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);//调用父类的属性
}
}
运行结果:
传递的名字
儿子名字
名字
//程序入口
public class Application {
public static void main(String[] args){
Student student = new Student();
}
}
//父类
public class Person {
public Person() {
System.out.println("这是父类的无参构造方法");
}
}
//子类
public class Student extends Person {
public Student() {
System.out.println("这是子类的无参构造器");
}
}
运行结果:
这是父类的无参构造方法
这是子类的无参构造器
总结:
1、super可以调用父类中受保护的属性和方法,但父类的私有方法(private)无法继承;
2、字类会自动继承父类的无参构造器,即隐藏代码为
//子类
public class Student extends Person {
public Student() {
super(); //隐藏代码,调用父类的无参构造
System.out.println("这是子类的无参构造器");
}
}
super() 会调用父类的无参构造器,注意, 要调用父类的构造器,必须在字类构造器的第一行。
当父类无无参构造时(当有有参构造时,自动没有无参构造,需要手动定义),字类无法继承,也无法定义字类的无参构造,但可以用super调用父类的有参构造。
3、super必须只能出现在字类的方法或者构造器中;
4、super和this不能同时调用构造方法(因为this也必须在字类构造器的第一行);
5、与this的区别(重点)
? a、代表的对象不同:
? this:代表本身调用着这个对象;
? super: 代表父类对象的应用;
? b、前提:
? this: 没用继承也可以使用;
? super: 只能在继承条件 才可以使用;
? c、构造方法:
? this(): 本类的构造;
? super(): 父类的构造;
原文:https://www.cnblogs.com/caijilin/p/15240770.html