class b1{
void bp(){
System.out.println("b1");
}
}
class b2 extends b1{
void bp(){
System.out.println("b2");
}
}
class b{
public static void main(String args[])
{
/*
b1 x1=new b1();  '说静态函数不能调用非静态方法
b1.bp();
b2 x2=new b2();
b2.bp();
*/b1 x3=new b2(); '可以,为什么?不理解?
x3.bp();}
}

解决方案 »

  1.   

    b1 x1=new b1();  
    x1.bp();
    b2 x2=new b2();
    x2.bp();
    你的b1、b2类中的bp方法不是static的当然不能用类名.方法名,来调用,应该用对象名.方法来调用
      

  2.   

    class b1{
    static void bp(){
    System.out.println("b1");
    }
    }
    class b2 extends b1{
    static void bp(){
    System.out.println("b2");
    }
    }
    public class ghyghost{
    public static void main(String args[])
    {
    /*
    b1 x1=new b1();  '说静态函数不能调用非静态方法
    b1.bp();
    b2 x2=new b2();
    b2.bp();
    */b1 x3=new b2(); //可以,为什么?不理解?
    x3.bp();}
    }
      

  3.   

    看看java虚拟机规范,你就明白了,写程序代码你首先要考虑到内存里是怎么存放的。
      

  4.   

    你的b1、b2类中的bp方法不是static的,必须用对象名.方法来调用
      

  5.   

    静态函数在没有对类进行实例化时就能进行调用,而非静态方法只能生成类的一个实例后才能调用。所以,不能在静态函数中调用非静态方法。如果你用类名直接调用静态函数,那就是在没有生成一个类的实例对象时调用非静态函数。这违反了java中的一些规定。
      

  6.   

    b1 x3=new b2();
    应该说是不可以的,父类不能用子类构造
      

  7.   

    LZ,你在胡扯,应该说静态函数不能调用非静态成员变量,这是对同一个类来说的。
    public class ghyghost{
    public static void main(String args[])
    {b1 x1=new b1();  '说静态函数不能调用非静态方法
    x1.bp();
    b2 x2=new b2();
    x2.bp();}
    }运行绝对没问题