java 多型缺陷
阿新 • • 發佈:2018-12-31
一,會覆蓋私有方法
package object;
class Derive extends Polymorphism{
public void f1()
{
System.out.println("I am Derive");
}
}
public class Polymorphism{
private void f1()
{
System.out.println("I am Polymorphism");
}
public static void main(String[] args)
{
Polymorphism d = new Derive();
d.f1();
}
}/* output:
I am Polymorphism
*///:~
二.域與靜態方法,一旦你訪問某個域,這個訪問就將在編譯期進行解析,這種情況通常不會發生,因為通常將域設為private,只能通過方法訪問域
package object; class Base{ public int i = 0; public int get(){return i;} } class Base2 extends Base{ public int i =2; public int get(){return i;} public intget1(){return super.i;} } public class Polymorphism{ public static void main(String[] args) { Base b1 = new Base2(); //當Base2轉型為Base時任何域訪問操作都將由編譯器解析,因此不是多型的
//,在本例中,Base2.get()和Base1.get分配了不同的儲存空間
System.out.println(b1.get()+" " + b1.i); Base2 b2 = new Base2(); System.out.println(b2.get()+" " + b2.i + " "+ b2.get1()); } }/* output: 2 0 2 2 0 */
當某個方法時靜態的,它的行為就不具有多型性
package object; class Base{ public static int i = 0; public static String get(){return " " + i;} } class Base2 extends Base{ public static int i =2; public static String get(){return " " + i;} public int get1(){return super.i;} } public class Polymorphism{ public static void main(String[] args) { Base b1 = new Base2(); Base.get(); System.out.println(b1.get()); Base2 b2 = new Base2(); System.out.println(b2.get()); } }/* output: 0 2 */