方法不应该是归某个对象拥有的吧!是类里面公有的,当你new一个新对象出来的时候只是把他指向方法的地址(对这个地址的访问应该没问题)放进该对象的一个空间里(这个空间应该不是private).你所说的private应该是针对的变量(不包括覆盖)? 而且方法的覆盖也是在内存中的一个空间里重新写,并没有真正覆盖原来的那个方法;所以他只是改变了那个地址. class A { public void fun1() { func2(); } private void fun2() { System.out.println("This is A::fun2()"); } }
class B extends A {
private void fun2() { System.out.println("This is B::fun2()"); } }
main() { B b = new B(); //这里应该是改变了超类里面的那个地址? b.func1(); }
对不起是说反了,但是在书上才找到一个列子 class Parent{ int a; private int g(int a,int b){ ... } } class Child extends Parent{ int a; int b; public int g(int a,int b){ //增大访问权限的覆盖,(按你说的,这个也是新定义的?) ... } }
嘿嘿,我承认我刚才说的那个权限范围错了,但没说lz的那个题我搞错了, 访问控制符可以使用与超类相同或比超类权限更大的控制符 class Parent{ int a; private int g(int a,int b){ ... } } class Child extends Parent{ int a; int b; public int g(int a,int b){ //增大访问权限的覆盖,(按你说的,这个也是新定义的?如果改成private也应该是相同道理,只是权限没变化) ... } }