[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00330] Re: java のオーバーライドについて



お久しぶりのみどりです。

最近は、なぜか、私の嫌いなLook and Feel系の仕事が多く、
FOPなんかもつかってます。

ちょっと、気づいたので、、、。

えんどう <yasuyuki@xxxxxxxxxxxx> wrote:

> 
>  えんどうです。
> 
> >	public Vector3fArrayList(){
> >		list = new ArrayList();
> >	}
> 
> これ↑はコンストラクターだとして、
> 
> >	public Vector3f get(int i){ /* 戻りの型はArrayList.get(int)と互
> >換性がありません。*/
> >		return (Vector3f) list.get(i);
> >	}
> 
> これは何なのでしょうか。メソッドであれば戻り型が必要です。


これは、なかなか、、、、。
Vector3f という別のクラスがあるんですよね。
それが、Vector3fArrayList の要素になっている。
で、このメソッドの get の戻り値は、List の要素を
Vecror3f でキャストしていると、読めます。

java.util.ArrayList
   |
    Class Vector3fArrayList

get 

public Vector3f get(int i)

としたいのかとおもいます。でも、Overrideの場合、hierarchy間で
パラメーターと戻り値の型は同じでなければなりません。

その他に、何点か気づいた事を、、.
まず、Vector3fArrayList は ArrayList にExtendしているから、
それ自身が ArrayList で
別に、ArrayList を持つ必要はありません。
それから、これは、質問の本質とは関係ありませんが、
main メソッドは、スタティックで無ければ成りません。
私は、基本的にあまやかしやですから、
Vector3f を Integer だと思って書き直してみました。


public class IntegerArrayList extends Arraylist
{
    public IntegerArrayList()
    {
        super();
    }
	
    public static void main(String args[])
    {
        IntegerArrayList val = new IntegerArrayList();
        Integer int1 = val.getInteger(0);
    }
	
    public Integer getInteger(int i)
    {
        return (Integer)get(i);
        // または、(Integer)this.get(i);
    }
}	
と、オーバーライドはどこかへ行ってしまいまいした。

最後にもうひとつ。main メソッドのなかで、IntegerArrayList を
Instatiate していますが、中身は空っぽです。だから、
val.getInteger(0)は IndexOutBoundException になるはずです。

-- 
Midori Aida <maida@xxxxxxxxxxxx>