你的位置:首页 > Java教程

[Java教程]关于方法的继承和覆写


 * 关于方法的覆写:
 *   关于方法的重写和覆盖的前提条件:
 *     子类继承父类,就继承了父类的所有方法和属性,就相当于把父类的代码完全复制一份到子类,只是相当于
 *     我们子类中可以添加新的方法和属性,同时也可以扩展改写继承自父类的方法
 *     1 什么时候方法要进行重写?
 *     如果父类中的方法已经无法满足子类的要求,需要将父类中的方法进行重新写一遍
 *     2.子类如果重写父类中的方法之后,这类对象一定调用重写之后的方法
 *     3 发生方法覆盖的条件:
 *     第一: 发生在具有继承关系的两个类之间
 *     第二: 必须具有相同的方法名,相同的返回值类型,相同的参数列表(如果是参数列表不同,系统就会认为这两个是不同的方法进行重载)
 *     (返回值代表了函数的功能,复写不能更改函数的功能)
 *     第三: 重写的方法不能比被重写的方法拥有更低的访问权限
 *     第四: 重写的方法不能比被重写的方法抛出更广泛的异常
 *     第五: 私有的方法不能被覆盖
 *       不调用的时候就没有报错
 *       调用的时候才会报错,说明,这个方法是运行时错误
 *      第六: 构造方法无法被覆盖,因为构造方法无法被继承
 *      第七: 静态的方法不存在被覆盖
 *      因为,静态方法进来以后,不会再有新的内存操作,所以,就没有覆盖这一说
 *      第八: 覆盖值得是成员方法,和成员变量无关
 *      成员变量,是指这个类代表的所有个体的共有属性,只是属性值不一样
 *
 *      4 继承最基本的作用:代码复用
 *       继承最基本的功能:方法可以重写
 *       new也是代码的重用,但是不可以进行扩展,,重写就是扩展,不可以
 *       new的时候,只能够被调用,对数据进行删减改查,不能够进行功能扩展

* 私有的方法无法被覆盖,即使在程序中重写了方法,但是底层仍然会调用父类方法
 下面是一个覆写的例子:
//父类
class Override_02{//一个类
    //私有方法
    private void m_1(){//私有的没有返回值的m_1方法
        System.out.println( "A'm_1 method invoke!!" );//输出
    }
    public void m2(){
        System.out.println( "我是父类" );
    }
    //入口
    public static void main (String [] args){//公共的静态的没有返回值的main方法,是程序的入口
        //多态:这里是私有方法,不能被继承
        Override_02 a = new B();//运行原理:把子类对象的地址赋值给父类的对象(多态),输出的时候先看能不能被继承,如果不能被继承,那就输出父类的内容,如果能被继承,就看能能不能被覆写,(要求:返回值,方法名,形参列表都要一样),如果没被覆写,就输出父类的内容,如果被覆写了,就输出子类的新内容
        a.m_1();//父类中的m_1方法不能被继承,所以输出的是父类的m_1
        a.m2();//父类中的m2方法能被继承,所以输出子类中的内容,因为子类的方法名,返回值,形参列表和父类相同,所以可以被复写,输出子类的新内容
    }
}
//子类
class B extends Override_02{
    //尝试重写父类的私有方法
B(){

    }
    public void m_1(){
        System.out.println( "'B'm_1 method invoke" );
    }
    public void m2(){
        System.out.println( "我是子类 " );
    }
}

   由于学习方法的覆写的时候,还没有学习多态,所以里面涉及多态的东西我也知道的不是很多,主要的是关于方法的覆写,运行原理也是我自己的理解写出来的,有什么不对的地方还希望和大家多多交流,O(∩_∩)O谢谢!