java学习笔记43--方法重写(方法覆盖)

本文详细介绍了Java中的方法重写,包括重写存在的条件、静态方法与私有方法的特点、重写的规则以及重写的目的。强调了静态方法不能被重写,私有方法无法访问和重写,以及重写时参数列表、访问修饰符、异常范围和返回类型的要求。
摘要由CSDN通过智能技术生成

1)方法重写只存在于子类和父类(包括直接父类和间接父类)之间。在同一个类中方法只能被重载,不能被重写.

2)静态方法不能覆盖
       a. 父类的静态方法不能被子类重写为非静态方法 //编译出错
       b. 父类的非静态方法不能被子类重写为静态方法;//编译出错
       c. 子类可以定义与父类的静态方法同名的静态方法(但是这个不是覆盖)
        例如:
             A类继承B类 A和B中都一个相同的静态方法test
                 B a = new A();
                 a.test();//调用到的时候B类中的静态方法test

                 A a = new A();
                 a.test();//调用到的时候A类中的静态方法test

             可以看出静态方法的调用只和变量声明的类型相关
             这个和非静态方法的重写之后的效果完全不同

3)私有方法不能被子类重写
        子类继承父类后,是不能直接访问父类中的私有方法的,那么就更谈不上重写了。
    
        例如:
        public class Person{
            private void run(){}
        }
        //编译通过,但这不是重写,只是俩个类中分别有自己的私有方法
        public class Student extends Person{
            private void run(){}
        }

4)重写的语法
        1)方法名字必须一样
        2)参数列表必须一样
        3)访问修饰符可以扩大,但不能缩小
        4)抛出异常范围可以缩小,但不能扩大
        5)返回类型可以相同,也可以不同,如果不同,那么重写后的方法返回类型必须是原来方法返回类型的子类型.

        例如:
        public class Person{
            public void run(){}

            protected Object test()throws Exception{
                return null;
            }
        }
        //编译通过,子类继承父类,重写了run和test方法.
        public class Student extends Person{
            public void run(){}

            public String test(){
                return "";
            }
        }
            

    5)为什么要重写
        子类继承父类,继承了父类中的方法,但是父类中的方法并不一定能满足子类中的功能需要,所以子类中需要把方法进行重写。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值