1. 程式人生 > >java 多型缺陷

java 多型缺陷

一,會覆蓋私有方法

 
 

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 int
get1(){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
*/