先说final吧!有这个关键字修饰的方法是不能被重写的,也就是说子类里面不能有同名方法的。而abstract是抽象方法,必须在子类里面被实现或者保持抽象修饰。所以这两个概念可以说是完全相反的,所以不能修饰同一个方法
static修饰的方法或者变量是一个类的方法和变量,而不是类对象的。为什么静态方法一定要使用静态方法。//////不太明白

解决方案 »

  1.   

    静态方法一定要使用静态变量
    ---------------------------------------------------------------------------------------
    静态method是在内存分配中就分配了特定得入口地址,该入口地址直到程序结束后才退出取消,这就迫使要相应的掉用static 变量,如果不调用static 变量,普通的变量一到方法运行结束就释放了她的内存就找不到特定的内存地址,这是不符合静态方法的设定的
    __________________________________________________________
    final
    final类是不能继承的,final方法是不能重写的,final变量就是常量了
    这是出之安全性的考虑,由于她的不可变性,对编译器或解释器的正常运行有很大的帮助
    String就是不可变类哈哈
    __________________________________________________________
    abstract类就只关心她子类有那种功能,并不关心具体实现,其功能由子类实现
    avstract方法就不能实现,只能申明,一定要在抽象类中
      

  2.   

    public class TestSt {
    public static String st = "Static string";  //静态变量
    public static void fun(){                   //静态方法
    System.out.println(st);          
    }

    public static void main(String[] args){    
    System.out.println(TestSt.st);     // * 1 
                      System.out.println(st);            // * 2 
                      // 1  2 行的运行效果一样.要注意到这两个"静态方法都没有属于某个对象"
                      // 实际上静态方法就是可以不用创建变量就可以通过类名直接用的方法.
    TestSt.fun();

    }
    }
      

  3.   

    第一个问题,静态方法是类直接调用,实例方法是类实例调用,所以静态方法可以在不创建类实例的情况下被调用,而实例方法却必须有类实例情况下才能被调用。这样就可以知道为什么静态方法一定要使用静态方法了,因为你不能保证在你调用静态方法的时候一定有了类实例,所以,就只能这样规定,才能保证不出现异常。第二个问题,被声明为final的方法或变量或类是不能被继承的,而抽象类或抽象变量或抽象方法必须被继承才能使用。这样就看出了矛盾,所以
      

  4.   

    final 修饰方法后此方法就不能被继承
    abstract 修饰方法后用来被继承,且不能有实现部分
      

  5.   

    1、静态方法在调用的时候普通的field还没有实例化,
    所以不能使用,只能调用静态的数据成员(有默认值)的.
    2、final的方法是不可以被overload的,
    而abstract是必须被overload的,矛盾,
    所以不可以同时使用.