面向对象的编程学习之super关键字"/>
Java——面向对象的编程学习之super关键字
详解Java中super关键字的使用
- super调用属性、方法
- super调用构造器
- super和this关键字的区别
super调用属性、方法
- super可以调用:属性、方法、构造器
- super可以理解为:父类的。。。
- super关键字的使用
我们可以在子类的方法或构造器中,通过"super.属性"或"super.方法"的方式,显式的调用父类中声明的属性或方法。
特殊情况,当父类和子类中拥有同名的属性时,如果在子类中调用父类中的属性,需要显式的使用"super.属性"的方式,表明调用是父类中声明的属性。
子类重写了父类的方法,想要调用父类的方法,需要显式的使用"super.方法"调用,表明调用的是父类中被重写的方法。
注:父类中声明为private的属性,在子类中不能通过"super.属性"的方式进行调用。
举例
public class Hello {public static void main(String[] args) {Student s1 = new Student();s1.test();}
}// 父类为Person
class Person{private int age;public String id = "12345";public void show(){System.out.println("Hello Person");}
}
// 子类继承了Person
class Student extends Person{//子类声明了一个和父类同名的属性public String id = "667788";//子类重写了父类中的show()方法@Overridepublic void show() {System.out.println("Hello Student");System.out.println(id); // 调用本类中的属性System.out.println(super.id); // 调用父类中的属性}public void test(){show(); // 调用本类中的方法super.show(); // 调用父类中的同名方法}
}
super调用构造器
- 我们可以在子类的构造器中显式的使用“super(形参列表)”的方式,调用父类中声明的指定构造器
- super(形参列表)的使用,必须声明在子类构造器的首行
- 在类的构造器中,针对"this(形参列表)"或"super(形参列表)"只能二选一,不能同时出现。(this关键字的使用)
- 在构造器首行,没有显式的声明"this(形参列表)“或"super(形参列表)”,则默认调用的是父类中空参的构造器:super()。
- 在类的多个构造器中,至少有一个类的构造器使用了"super(形参列表)",调用父类的构造器。
举例
class Person{private int age;private String name;public Person(){}public Person(int age, String name){this.age = age;this.name = name;}
}class Student extends Person{private String grade; // 年级public Student(){super(); // 调用父类中空参的构造器}public Student(int age, String name, String grade){super(age, name); // 调用父类中含参的构造器this.grade = grade;}
}
在父类中,我们创建了两个构造器,一个空参,另外一个含有参数,并对属性进行了赋值。子类Student继承父类后,也创建了两个构造器,并通过super关键字调用了父类中的相应构造器。调用构造器的方法是多样的,实际中可以按照我们的需求灵活调用。例如对于上面的代码,还可写成:
class Student extends Person{private String grade; // 年级public Student(int age, String name){super(age, name); }public Student(String grade){this.grade = grade;}
}
super和this关键字的区别
区别 | this | super |
---|---|---|
调用属性 | 调用本类中的属性,如果本类没有此属性则从父类中继续查找 | 访问父类中的属性 |
调用方法 | 直接访问本类中的方法 | 访问父类中的方法 |
调用构造器 | 调用本类构造器,必须放在构调器首行 | 调用父类构造器,必须放在子类构造器的首行 |
更多推荐
Java——面向对象的编程学习之super关键字
发布评论