函数的两个特性(重写和重载)
第一部分
1、重载的概念
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。换句话说重载和参数列表有关系,与返回值类型没有关系;2、重载的特点
与返回值类型无关,只看参数列表。3、重载的好处
方便于阅读,优化了程序设计。4、什么时候使用重载
当定义的功能相同,但是参与运算的位置内容不同,那么这时就要定义一个函数名称以表示其功能,方便阅读而通过参数列表的不同来区分多个同名函数;5、代码体现
class FunctionOverload { public static void main(String[] args) { // 函数名相同但是参数列表不同;这就是重载 add(5,7); add(3,5,54); System.out.println("Hello World!"); } // 获取两个整数的和 public static int add(int a,int b) { return a+b; } // 获取三个整数的和 public static int add(int a,int b,int c) { return a+b+c; } }<strong> </strong>
第二部分
1、背景
当子类中的方法名和父类中方法名是一样的时候,在主函数中创建子类对象,并调用父类的方法的时候,这是发现运算的结果是子类中的方法,父类中的方法并没有运行;
2、重写的概念
当子类出现和父类一模一样的函数时,子类中的对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖一样,这种情况就是函数的另一个特性:重写又成为覆盖;
3、覆盖的应用
当子类继承父类,沿袭了父类的功能,到子类中,但是子类虽具备该功能,但是功能的内容却和父类不一致,这时就没有必要定义新功能,而是使用覆盖特性,保留父类的功能定义,并重写功能内容。4、覆盖的特点
沿袭父类内容,定义子类特有内容;
5、覆盖功能的好处
5.1、有利于功能扩展;
5.2、在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。
5.3、父类中的私有方法不可以被覆盖。6、覆盖的注意事项
6.1、子类覆盖父类时,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。6.2、静态只能覆盖静态,静态不能覆盖非静态,原因是静态在内存中是先加载的,而非静态是后加载进内存的;7、代码体现
class Fu { void show() { System.out.println("show fu"); } void speak() { System.out.println("vb"); } } //子类继承父类,通过覆盖后子类中就有了两个方法; class Zi extends Fu { // 子类和父类speak的功能是相同的 void speak() { System.out.println("java"); } void show() { System.out.println("show zi"); } } class ExtendsDemo3 { public static void main(String[] args) { // 建立子类对象,调用父类方法; Zi z = new Zi(); z.show(); z.speak(); } }<strong> </strong>
第三部分
重载和重写的区别
重载:只看同名函数的参数列表;重写:子父类方法要一模一样,包括返回值类型;
第四部分
我的总结
1、重写是函数名相同,但是函数的参数列表不同,与返回值类型无关;2、重载是子类和父类中的方法相同,子类中的方法覆盖父类中的方法,沿袭父类功能到子类中,在主函数中建立子类对象,调用父类方法;3、在进行复写是时候,必须保证子类的修饰符权限要大于父类的修饰符权限,才能够复写;4、静态只能覆盖静态,静态不能覆盖非静态;