(七)《Java编程思想》——多态的缺陷

1.不能“覆盖”私有方法

package chapter8;

/**
 * 不能"覆盖"私有方法
 */
public class PrivateOverride {
    private void f() {
        System.out.println("private f()");
    }

    public static void main(String[] args) {
        PrivateOverride po=new Derived();
        po.f();
        Derived d=new Derived();
        d.f();
    }
}

class Derived extends PrivateOverride {
    public void f() {
        System.out.println("public f()");
    }
}

【运行结果】:
private f()
public f()

2.域不呈多态性(只有普通方法具有多态)

/**
 * 
 */
package chapter8;

/**
 * 缺陷:域与静态方法
 */
class Super {
    public int field = 0;

    public int getField() {
        return field;
    }
}

class Sub extends Super {
    public int field = 1;

    public int getField() {
        return field;
    }

    public int getSuperField() {
        return super.field;
    }
}

public class FieldAccess {
    public static void main(String[] args) {
        Super sup = new Sub();
        System.out.println("sup.field = " + sup.field + " sup.getField() = "
                + sup.getField());
        Sub sub = new Sub();
        System.out.println("sub.field = " + sub.field + " sub.getField() = "
                + sub.getField() + " sub.getSuperField = "
                + sub.getSuperField());
    }
}

【运行结果】:

sup.field = 0 sup.getField() = 1
sub.field = 1 sub.getField() = 1 sub.getSuperField = 0

3静态方法不呈多态性

package chapter8;

/**
 * 静态方法不具有多态性
 */
class StaticSuper {
    public static String StaticGet() {
        return "Base staticGet()";
    }

    public String dynamicGet() {
        return "Base dynamicGet()";
    }
}

class StaticSub extends StaticSuper {
    public static String StaticGet() {
        return "Derived staticGet()";
    }

    public String dynamicGet() {
        return "Derived dynamicGet()";
    }
}

public class StaticPolymorphism {
    public static void main(String[] args) {
        StaticSuper sup = new StaticSub();
        System.out.println(sup.StaticGet());
        System.out.println(sup.dynamicGet());
    }
}

【运行结果】:

Base staticGet()
Derived dynamicGet()

原文地址:https://www.cnblogs.com/echolxl/p/3209022.html