一、super关键字
super代表的是父类的引用,用于访问父类的属性、方法和构造器
1.基本语法
访问父类的属性
super.属性名;
访问父类的方法
super.方法名(形参列表);
访问父类的构造器
super.(形参列表);
2.细节
- 在使用super之前,首先要有父子类的关系存在。
- 如果访问的属性,成员方法的访问修饰符是private(私有的)时,super关键字是不能直接访问的。
- 若想要访问private修饰的属性方法,我们可以在父类中创建Getting and Setting方法,然后调用super.getName() 和 super.setName(“修改的名字”),就可以访问了。
public class Father{
private String name;
//创建Getting and Setting方法
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
- ⭐️super只调用父类,跳过本类的查找,当子类中有和父类中的属性和方法重名时,要访问父类的属性方法时,使用super;
如果没有的话,有三种访问方式,(1)直接调用;(2)this.属性/this.方法();(3)super.属性/super.方法()
- 访问父类的构造器,super(参数列表),只能放在构造器的第一句,这里注意是使用在构造器中,且我们要知道 this 和 super 只能存在一个。
在前面的继承学习中,知道子类必须调用父类的构造器,对父类进行属性的初始化;当父类没有无参构造器而是有参构造器时,子类就要使用super()调用父类,使得初始化分工明确,父类属性由父类初始化,子类属性由子类初始化。
- 使用super时,当多个父类都有同名的成员(属性,方法)时,super遵循就近原则,在继承的关系中,方法程序的执行都是从子类查找开始,不断向高一级查找。
二、方法重写/覆盖(Override)
方法重写就是子类有一个方法,和父类的某个方法的名字,返回类型,参数一样,那么我们就说子类这个方法重写父类这个方法
1.原理
当我们使用测试类创建一个子类的对象时,并调用子类的方法,此时子类的方法和父类的方法构成重写,在调用子类的方法时,子类方法会覆盖父类的方法显示
代码如下 :
(测试类)
public class test{
public static void main(String[] args){
//在测试类中创建子类的对象
Student student = new Student();
student.say();//最终输出的是 Student类 say()方法
}
}
(父类)
public class Person{
public void say(){
System.out.println("Person类 say()方法");
}
}
(子类)
public class Student{
public void say(){
System.out.println("Student类 say()方法");
}
}
2.方法重写/覆盖的细节
- 构成方法重写,要求子类的方法的参数、方法名称要和父类的方法参数、方法名称保持一致。
- (1)子类的返回类型要和父类的返回类型保持一致,或者是子类的返回类型是父类的返回类型的子类;
(2)或者是创建两个类假如AA是父类,BB是子类,类的本质类似数据类型,所以我们再创建两个类,这两个类也是父子类的关系,并且在内建立一个返回类型为AA的method方法,在另外一个内建立一个返回类型为BB的method方法
(1)
public Object getInfo(){}
public String getInfo(){}
//String是Object的子类
(2)
public class test{
public static void main(String[] args){
Sub sub = new Sub();
}
}
//method 构成方法重写
class Base{
public AA method(){
System.out.println("AA method()");
}
}
class Sub extends Base{
public BB method(){
System.out.println("BB method()");
}
}
class AA{
}
class BB extends AA {
}
- 子类的方法不能缩小父类的方法的访问权限(修饰符)
也就是说 子类的修饰符的访问范围 >= 父类的修饰符的访问范围
三、总结
以上就是今天要讲的内容,本文介绍了 super 和 方法重写 的使用,而super 和 方法重写都是我们学习面向对象编程的重要知识点。