目录
1.子类调用父类属性
2.子类调用父类方法
3.构造器
4.父类定义有参构造,但未显示定义无参构造会导致程序报错(封装错误)
总结:
1.子类调用父类属性
父类Person
public class Person {
protected String name = "父亲";
}
子类Student
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);//父类实参
}
}
启动类Application
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.test("大儿子");
}
}
执行结果
第一个输出是输出了传递的参数
第二个输出this.name输出的是当前类中的name参数
第三个输出super.name输出的是父类中的name参数
2.子类调用父类方法
父类Person
public class Person {
protected String name = "父亲";
public void print(){
System.out.println("这是一个父亲");
}
}
子类Student
public class Student extends Person{
private String name = "儿子";
public void print(){
System.out.println("这是一个儿子");
}
public void test1(){
print();//当前类的对象
this.print();//当前类的对象
super.print();//父类的对象
}
}
启动类Application
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.test1();
}
}
输出内容
前两个输出调用的都是当前类print()方法
第三个输出调用的是父类print()方法
注:私有(private)的方法无法被继承,如果父类的print()方法设置的是private(私有),那么子类就无法通过super.print()调用
3.构造器
父类Person无参构造
子类Student无参构造
Application执行类
执行结果
调用的是子类Student,但是父类和子类的无参都执行了,说明还是有调用到父类。说明子类中存在隐藏代码。
super(); 就是隐藏代码 。但super();调用父类的构造器必须要在子类构造器代码的第一行,不然就会报错。
4.父类定义有参构造,但未显示定义无参构造会导致程序报错(封装错误)
父类定义了有参构造,没有显示定义无参构造也同样会导致子类无参构造中的super();报错
5.如果一定要调用父类的有参构造器
只要子类的super(name);调用的是有参就可以了



