* 关于方法的覆写:
* 关于方法的重写和覆盖的前提条件:
* 子类继承父类,就继承了父类的所有方法和属性,就相当于把父类的代码完全复制一份到子类,只是相当于
* 我们子类中可以添加新的方法和属性,同时也可以扩展改写继承自父类的方法
* 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谢谢!