Java面向对象基础(方法重写)

方法重写(overriding)

什么是重写(overriding):
方法重写也叫方法覆盖
子类根据需求对从父类继承的方法进行重新编写
重写时,可以用super.方法的方式来保留父类的方法
构造方法不能被重写

语法:
super.父类方法(非privite的方法)

方法重写总结:
至少两个类,有继承关系的父子类
方法重写时父子方法同名 同参 同返回值
重写方法不能比父类方法更严格的访问权限

super

super可以调用父类的有参无参构造方法

调用无参构造方法时:
子类的构造方法{ super.方法名(); }

调用有参构造方法时:
super.方法名(参数);【传入的参数要和父类方法参数保持一致】

super关键字访问父类成员:
使用super关键字,super代表父类对象
super只能出现在子类的方法和构造方法中
super调用构造方法时,只能是第一句
super 不能访问父类的privite成员

super的使用
使用场景:
1.子类重写父类方法
2.在子类中定义了和父类同名的成员变量
3.子类会覆盖父类的同名成员变量,super可以使父类被屏蔽的成员可见

调用父类的父类的方法,使用super.方法名就可以
因为java只支持单根继承
一个类值能有一个直接父类
一个类可以有多个间接父类

例如:

public class Father {
    
    
    String name = "father";
    public void m1(){
    
    
        System.out.println("father类的m1方法");
    }
}
public class Son extends Father {
    
    
    String name="son";
    public void m1(){
    
    
        System.out.println("son类的m1方法");
    }

    public void varTest(){
    
    
        System.out.println(name);
        System.out.println(super.name);//super 代表父类对象
        super.m1();
    }

    public static void main(String[] args) {
    
    
        Son son = new Son();
        son.varTest();
        son.m1();
    }
}

结果:
在这里插入图片描述

继承关系中的构造方法

继承条件下构造方法的调用规则:

子类构造方法没有通过super显示调用父类的有参构造方法,也没有通过this 调用自身的其他构造方法:
系统默认调用父类的无参构造方法

子类构造方法通过super显示调用父类的有参构造方法:
执行父类相应的构造方法,而不执行父类的无参构造方法 子类构造方法通过this显示调用自身的其他构造方法,在相应的构造方法中应用以上两条规则

Over the all:
1、调用子类构造方法就会先执行父类的构造方法
2、如果不指定调用哪个构造方法,会默认调用父类的无参构造方法
3、如果通过this或super指定了,就会调用指定的构造方法

方法重写和方法重载的区别

方法重写规则:
方法名相同
参数列表相同
返回值类型相同或者是其子类
访问权限不能严于父类
父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法
子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法
(注:静态方法中无法使用super)
父类的私有方法不能被子类覆盖
不能抛出比父类方法更多的异常

方法重写和方法重载对比:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yangyingjian123/article/details/113361095