方法的覆写

主要特征是子类能根据父类已有的方法进行功能的扩展,有可能定义的属性或方法与父类同名,这样称为覆写。

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方法不会再子类中查询方法,而是直接调用父类中的指定方法。

 

posted @ 2019-04-11 14:10  一博之主  阅读(610)  评论(0)    收藏  举报