你们好:
我是一个java初学者,有一些问题比较捆饶,希望大家解决;
1.static成员在内存里是怎么存储的(我以前学过c++,c++中的static成员是放在静态数据区域中)那java呢.
2.当基类继承主类的时候为什么不能重写基类里的函数.
3.当嵌套类的时候也不能将子类写成static类型.谢谢大家帮我解决.......急!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1. gemouzhi(gemouzhi) 不要误导lz准确地说static函数是不能多态A.a();//A.a();
    A a = new A();a.a() //A.a();
    A a = new B();a.a() //A.a();
    B a = new B();a.a() //B.a();
    所以一般采用第一种:类名.方法名(),而不是变量名.方法名()
      

  2. 3.当嵌套类的时候也不能将子类写成static类型.
    子类是可以写成static的!
    如HashMap.Map
      

  3. static成员存在JVM公共区域中,在整个JVM的任何地方只要是能有访问权限的地方都能直接使用.
      

  4. 1、和c++基本一样,举例:一个类里面有一个static 的变量t,int性,次类有两个实例:a和b
    在a中对t附值5那么b中的t的值也就是5了2、static方法是可以继承的,也是可以覆盖的,但是static方法不建议覆盖,也不建议用对象.方法名的形式操作,如public class Test2 {
    public static void tt(){
    System.out.println("ewrwer");
    }

    public static void main(String[] src){
    Test2.tt();
    Mychild.tt();
    }
    }class Mychild extends Test2{
    public static void tt(){
    System.out.println("456456");
    }
    }
    3、有人答了
      

  5. static和private默认的是final类型,继承不了,因为static是类函数,比如Parent类有个static方法为getValue(),son类覆盖了它,那么当
    Parent parent=new Son();
    parent.getValue();时调用的是Parent类的getValue()而不是Son类的getValue()
      

  6. 首先谢谢大家我搞清楚了先让大家看一段代码:
    public class test {
      public test() {
      }
      public static void main(String[] args) {
        test test1 = new A();
        test1.s(test1);
      }
      public static void r(){System.out.println("ssss");}
      public void s(test a){  a.r();
      }
    }class A extends test{  public static void r()
      {
        System.out.println("dddd");  }
      public void print()
      {
        r(); } 
    }
    当我用static类型的时候,结果还是ssss,不是dddd,这说明java虚拟机更本就没重写代码,只是将原来的再次写了一边,所以定义成static方法是可以被继承,但是不能被重写...
    还有个问题就是嵌套类中,子类是否能否定义成static类型方法.....(不是static类)
      

  7. 再补充一句,当不是static的时候,也就可以实现多态了..这说明还是继承了只是没实现多态...
      

  8. jvm 在分配之内存 的时候 同样有 “永恒“区域存放倒入的类以及其他静态的东西
      

  9. 还有个问题就是嵌套类中,子类是否能否定义成static类型方法.....(不是static类)
    何不试之?唉...想想子类也什么特别?
      

类似问题 »