作者kenl (ken)
看板java
标题Re: [问题] 禁止子类别宣告与上层变数名称相同的变数
时间Tue Mar 10 13:24:02 2009
※ 引述《PsMonkey (痞子军团团长)》之铭言:
: ※ 引述《kenl (ken)》之铭言:
例如我有一个变数 int counter
在程式每个 class (包括inner class)中都共用
如果别人(或者将来的我)
在 inner class 中再宣告 int counter=0
这样 complier 会完全没有 warning
(之前在这个 inner class 中一直使用外面的 counter
现在变成 inner class里的counter都变成0了
我想知道有没有方法
使得将来的我在这个 inner class 中宣告 int counter时
会知道这样会影响之前在这个inner class中使用外面counter的程式码
)
我知道如果当初写程式时
每次都明确写成 this.counter 或 parent.counter
这样的话将来在 inner class 再宣告counter时
也不会有bug,但这样很不方便
: : 例如:
: : class A{
: : int i;
: : class B{
: : int i; // 这行的i会在class B的scope中覆盖class A中的 i
: : }
: : }
: : 我问题是能不能在class A宣告 int i 时
: : 就限制底层不能把它覆盖 ?
: : 我用protected好像不行...
: 覆盖? 我实在很想说:「请定义一下『覆盖』的意思」
: 不过,这好像有点瞎...
: 还是来写程式吧...
: public class Test {
: int a;
: Foo foo;
: class Foo{
: int a;
: Foo(){
: this.a=100;
: }
: public String toString(){
: return ""+a;
: }
: }
: public String toString(){
: return "this.a="+a + "\n foo.a="+foo.a + "\n "+foo;
: }
: Test(){
: foo = new Foo();
: this.a=-1;
: }
: public static void main(String[] args) {
: Test a = new Test();
: System.out.println(a);
: }
: }
: 当然,如果你只是要别人不能取同样的名字...
: ㄜ... 阿.... Orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.90.200
1F:推 PsMonkey:你到底有没有去测试程式码... 03/10 13:44
2F:推 PsMonkey:不然写个会如你所说挂掉的程式码也行... 03/10 13:45