Re: [問題] 請問final可以被改寫嗎??
稍微改編一下之前版上的程式碼
應該可以稍稍釐清override跟shadow
class A {}
class B extends A { int i = 1;}
class C extends B { int i = 2;
int getSupper(){ return super.i;}
}
class D { void h(A x){System.out.println(1);} }
class E extends D { void h(C x){System.out.println(2);} }
class F extends E { void h(A x){System.out.println(3);} }
class G extends F { void h(B x){System.out.println(4);}
void h(C x){System.out.println(5);} }
public class TestOverriding
{
public static void main(String[] args)
{
B b = new C();
C c = (C)b;
C cc = new C();
B bb = b;
E e = new G();
G g = new G();
((E)g).h(b); //output:3
g.h(b); //output:4
e.h(b); //output:3
e.h((C)b); //output:5
e.h(c); //output:5
System.out.println("c.i = " + c.i); // output:2
System.out.println("c.getSuper() = " + c.getSupper()); // output:1
System.out.println("cc.getSuper() = " + cc.getSupper());//output:1
System.out.println("b.i = " + b.i); //output:1
b.i = 5;
System.out.println("=======set b.i = 5======");
System.out.println("b.i = " + b.i); //output:5
System.out.println("c.i = " + c.i); //output:2
System.out.println("c.getSuper() = " + c.getSupper()); //output:5
System.out.println("cc.getSuper() = " + cc.getSupper());//output:1
System.out.println("bb.i = " + bb.i); //output:5
}
}
OUTPUT:
3
4
3
5
5
c.i = 2
c.getSuper() = 1
cc.getSuper() = 1
b.i = 1
=======set b.i = 5======
b.i = 5
c.i = 2
c.getSuper() = 5
cc.getSuper() = 1
bb.i = 5
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.51.171
※ 編輯: peacedove 來自: 220.135.51.171 (07/28 03:42)
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):