方法的覆写
主要特征是子类能根据父类已有的方法进行功能的扩展,有可能定义的属性或方法与父类同名,这样称为覆写。
1.方法的覆写(子类定义了和父类相同的方法名称,返回值类型,参数类型及个数),称为方法的覆写
1 class A{ 2 public void fun(){ 3 System.out.println("A类中的fun方法。"); 4 5 } 6 class B extends A{ 7 public void fun(){ // 方法的覆写 8 System.out.println("B类中的fun方法"); 9 } 10 } 11 } 12 public class StringDemo1 { 13 public static void main(String args[]){ 14 B b = new B(); 15 b.fun(); 16 } 17 }
如果B类中中没有fun方法,b.fun()将调用父类中的方法,但此时B类进行了方法的覆写,所以此时运行的结果是"B类中的fun方法"。由实例化的子类来决定。
覆写结果分析:
观察实例化是哪个类
观察这个实例化类里面的方法是不是覆写过的,如果没有覆写过调用父类
使用原则(被动):发现父类中的方法名称功能不足---不适合本子类,但又必须使用这个方法名称,就要使用覆写。
子类覆写的方法不能拥有比父类更严格的访问控制权限。------public default private
1 class C { 2 public void fun() { 3 this.print(); 4 } 5 6 private void print() { 7 System.out.println("A类中的fun方法。"); 8 } 9 } 10 class D extends C{ 11 public void print(){ 12 System.out.println("B的无参构造"); 13 } 14 } 15 16 public class StringDemo1 { 17 public static void main(String args[]){ 18 D b=new D(); 19 b.fun(); 20 } 21 }
相当于子类自己定义了一个新的方法而已
一般情况下子类能调用的一定是被覆写过得方法
1 class C { 2 public void print() { 3 System.out.println("A类中的fun方法。"); 4 } 5 } 6 class D extends C{ 7 8 public void print(){ 9 //this.print();//这里隐藏了this.方法,在本类中查找print方法,进行递归调用 10 super.print(); 11 System.out.println("B的无参构造"); 12 } 13 } 14 15 public class StringDemo1 { 16 public static void main(String args[]){ 17 D b=new D(); 18 b.print(); 19 } 20 }
关于super方法和this方法的区别
---this方法会在本类中查找是否存在要调用的方法名称,如果存在则直接调用,如果不存在会调用父类中的方法,如果父类中不存在方法,则会发生编译错误。
----super方法不会再子类中查询方法,而是直接调用父类中的指定方法。

浙公网安备 33010602011771号