名前空間
ただし、このような曖昧な命名は、Java言語仕様上は合法ではあるものの、コードの可読性やメンテナンス性を損なうため、一般的には避けるべきである。違反コードには警告を出す静的コード解析ツールもある。なお、C/C++やC#、Schemeなどでは、上記のように同じ名前の関数(メソッド)と変数(フィールド)が同じスコープで再定義された時点でエラーになるか、値が束縛された名前で関数を呼び出そうとするとエラーになる。他の例としては、関数(メソッド)内で、その関数(メソッド)と同じ名前のローカル変数を定義した場合、文脈によって暗黙的に区別できるならば(それが望ましいかどうかは別として)同じ名前を使用することができる。
しかし、ひとつの名前空間の中で同名の型/同名の変数/同名の関数を複数定義すると問題が発生する。次の疑似コードのように、同じ名前の関数、Hogeを2つ定義したとする。
この場合、2つ目のHoge関数が定義された時点で、処理系は多重定義としてエラーを出す。特に複数のチームで開発を行っていると名前の衝突が起きやすい。次の例は、別々のチームで書かれた2つの関数Hoge()の名前の衝突を避けるため、関数名の先頭に「チーム名_」とつけるように取り決めた場合のものである。
これでも名前の衝突は避けられるが、呼び出しでは常にチーム名まで含めた名称で記述しなければならないため、記述も面倒でソースコードは読みにくくなってしまう。また、両方の関数をincludeしないような時には名前の衝突は起こらず、せっかくの命名規則も取り越し苦労に終わってしまう。