覆写

1. 方法的覆写:子类定义与父类方法名称相同,参数个数和类型完全相同的方法。

2. 如果方法覆写,那么在实例化子类的时候,调用的将会是子类所覆写过的方法。

3. 覆写的意义在于优化父类的功能。

4. 子类方法覆写后,如果想要调用父类的方法,必须使用 super.方法()

5. 只要是在子类中调用父类的方法,一定要在方法前追加 super.方法()

class Older {
    public void print(){
        System.out.println("父类的方法");
    }
}

class Young extends Older {
    public void print(){
        System.out.println("子类覆写了父类的方法");
    }
}

public class Demo{
    public static void main(String args[]){
        new Young().print();
    }
}
/*---------------------------------------------
E:\Javacode>java Demo
子类覆写了父类的方法

E:\Javacode>*/

 

方法覆写的限制:

1. 被覆写的方法不能拥有比父类更为严格的访问权限

  public > default > private

  a. 如果父类用 private 定义,那么子类可以为 private, default, public

  b. 如果父类用 default 定义,那么子类可以为 default, public

  c. 如果父类用 public 定义,那么子类只能用 public 定义

 

方法重载与覆写的区别:

重载:方法名称相同,返回值,参数类型和个数不同,没有权限限制,发生在 一个类中

覆写:方法名称,返回值,参数类型和个数都相同,被覆写的方法不能有更严格的控制权限,发生在继承关系中

 

属性覆盖:子类定义了与父类相同名称的成员

class Old {
    String info = "我是你爸爸";
}

class Son extends Old {
    String info = "我是你儿子";  //属性覆盖--如果父类的 info 用 private 封装了,那么子类的info就和父类没有什么关系了
    
    public void fun(){
        System.out.println(super.info);
        System.out.println(this.info);
    }
}

public class Demo{
    public static void main(String args[]){
        Son son = new Son();
        son.fun();
    }
}
/*---------------------------------------------
E:\Javacode>java Demo
我是你爸爸
我是你儿子

E:\Javacode>*/

 

 

super 和 this 的区别:

1. 在程序类中使用 this 表示先从本类查找所需要的属性或者方法。如果本来不存在再查找父类定义。

2. super 表示不查找子类,直接查找父类的属性或者方法。

3. this 和 super 都可以进行构造方法的调用, this() 调用的是本类的构造方法, super() 是由子类调用父类的构造,两者都需要放在构造方法的首行,所以不能同时出现。

4. this 可以表示当前对象。

posted @ 2019-02-19 17:25  眉毛病  阅读(302)  评论(0编辑  收藏  举报