java覆写(Override)

一、覆写的基本概念

在上文(java继承详解)已经理解了继承的关系,那么就存在了子类和父类的联系,在子类有可能定义和父类完全相同的属性和方法,这时候就称为复写了。

二、覆写方法

当子类定义了和父类方法同名、参数列表相同、返回值类型相同的方法的时候,称为方法的覆写。

范例1(没有覆写方法):

class A {
    public void print() {
        System.out.println("一个王富贵");
    }
}
class B extends A{
}
public class TestDemo4 {
    public static void main(String[]args){
        B b = new B();
        b.print(); //方法从父类继承过来
    }
}

运行结果:

一个王富贵

实例化的是子类的对象,但是子类里没有print()方法,那么就使用从父类中继承而来得print()方法。

范例2(实现覆写):

class A {
    public void print() {
        System.out.println("一个王富贵");
    }
}
class B extends A{
    public void print() { //方法名称、参数列表、返回值类型完全相同
        System.out.println("一个王富贵");
    }
}
public class TestDemo4 {
    public static void main(String[]args){
        B b = new B();
        b.print();//调用的是子类覆写的方法
    }
}

运行结果:
 

一个王富贵

当一个类中的方法被覆写后,如果实例化的是这个子类的对象,则调用的方法就是被覆写的方法。

在进行覆写方法的时候要注意:被子类覆写的方法不能比父类拥有更高的访问权限,如果是父类的方法是default,那么子类覆写只能是default或public权限,而如果父类的方法是public,那么子类的访问权限只能是public。

当一个子类覆写了一个父类方法的时候,子类想要调用父类被覆写过的方法,要在方法前面加上"super"

范例3(调用父类被覆写过的方法):

class A {
    public void print() {
        System.out.println("一个王富贵");
    }
}
class B extends A{
    public void print() {
        super.print();
        System.out.println("Hello World");
    }
}
public class TestDemo4 {
    public static void main(String[]args){
        B b = new B();
        b.print();
    }
}

运行结果:

一个王富贵
Hello World

三、this和super的区别

java覆写(Override)_第1张图片

一定要记住操作范围:

(1)this.方法():先从本类查找是否存在指定的方法,如果没有找到,则调用父类操作;

(2)super.方法():直接由子类调用父类之中的指定方法,不再找子类

观察下面范例,这样的操作属于覆写吗?

范例4:

class A {
    private void print() {
        System.out.println("一个王富贵");
    }

    public void fun() {
        this.print();
    }
}
class B extends A{
    public void print() {
        System.out.println("Hello World");
    }
}
public class TestDemo4 {
    public static void main(String[]args){
        B b = new B();
        b.fun();
    }
}

运行结果:

一个王富贵

分析上例:从概念上来讲,现在父类的权限是private,而子类是public,的确是扩大了权限,而方法的名称、参数列表(参数名称及个数)、返回值类型都一样,看似好像就是覆写,但是,使用了private定义的操作都是无法覆写的。

四、方法重载与覆写的区别

java覆写(Override)_第2张图片

你可能感兴趣的:(JAVA学习)