如题:
希望各位大牛们,多说点啊

解决方案 »

  1.   

    成员变量是 private 的啊,你把方法弄成 private 的话,那子类也是不能重写的
      

  2.   

    首先要弄清楚继承,一个类,有成员变量和方法,要看看它们各自的修饰符,如果这个变量或者方法是private,无论如何我都是自己来用的,其它类是无法调用的。
      

  3.   

    第一个问题。当父类把方法用private修饰了, 这算不算隐藏了父类的方法???
    第二个问题,方法可以覆盖,当你子类定义的成员变量和父类的成员变量同名同类型的时候,这算不算覆盖??
    调用的时候如果想调用父类的成员变量得加上super关键字。
      

  4.   

    我觉得隐藏和覆盖只是一个分类的概念,本质在某种程度上可能没什么不同有没有确凿的证据证明隐藏(Shadowing)只是隐藏,就是说还是继承过来了(变量可能还好证明,因为变量可以只是在一个类的部分区域被隐藏,但对于静态方法的隐藏怎么证明呢),而覆盖却是覆盖了,没有继承过来?
      

  5.   

    我的理解是这样的
    成员变量的选择是通过静态绑定的,也就是在编译期间决定,也就是通过引用变量决定,而不是通过实际对象决定,
    比如
    class A{
       public int t;  //为了突出问题,所以这里用Public
    }
    class AA extends A{
       public int t;

    那么
    A a = new AA();
    那么这个时候,a就是引用变量,真正的对象时new AA()创造的对象,成员变量的选择是由引用类型决定
    这个时候,a.t就是代表父类中的成员变量,
    这就是所谓的静态绑定,所以也就是出现了隐藏,相同道理,static方法也有隐藏的现象,
    而普通的方法,则是动态绑定了,也就是由对象类型决定,而不是引用类型决定了,这就是哦我们平时所说的多态
    楼主,可以不用给太多分的
      

  6.   

    把子类的对象强制转换成父类类型,然后看能不能调用到其被隐藏的的属性或方法。
    参考,子类可以继承父类的私有属性http://blog.csdn.net/naruto_ahu/article/details/8044887
    class Base{
    public int a = 1;
    public void fun(){
    System.out.println("Base fun()");
    }
    public static void staticf(){
    System.out.println("Base staticf()");
    }
    }
    public class Derived extends Base {
    public int a=2;   //会隐藏Base.a
    @Override
    //下面实例方法会覆写超类中可访问到的具有相同签名的实例方法[JLS 8.4.8.1],不是隐藏
    public void fun(){  
    System.out.println("Derived fun()");
    }
    //@Override
    //下面静态方法会隐藏超类中可访问到的具有相同签名的静态方法
    public static void staticf(){
    System.out.println("Derived staticf()");
    }
    public static void main(String[] args) {
    Derived test = new Derived();
    //测试test对象的属性和方法
    System.out.println("test.a = "+test.a);
    System.out.println("((Base)test).a = "+((Base)test).a);
    ((Base)test).fun();
    test.staticf();
    ((Base)test).staticf();
    }
    }
      

  7.   

    对,那类似地,对覆盖(Override)来说,是不是就访问不到了?
      

  8.   

    因为就是这么定义的,11楼说的正确,所以属性经常需要定义成private xx;public void setXXX(){}
    public xx getXXX(){}
      

  9.   

    确认的There are methods that a subclass cannot override. For example, in Java, a method that is declared final in the super class cannot be overridden. Methods that are declared private or static cannot be overridden either because they are implicitly final. It is also impossible for a class that is declared final to become a super class.http://en.wikipedia.org/wiki/Method_overriding