我要分析的两种情况与static和final两个修饰符有关~

 

1)static

static修饰的方法不能被重写,而final修饰的方法也不能被重写。

 

2)final

由于private和public的可见性不同,private仅仅是某个特定的类可见,而子类不可见,所以允许子类和父类都可以有用private final修饰的相同方法,如下例中的public final void test2(){};

而public子类可见,如果子类和父类都有public final,那么在子类中就有两个相同的public final方法,这显然是不可以的,因而,不允许子类和父类都可以有用public final修饰的相同方法(protected以及无访问修饰符的也一样)。

 

 

示例:(注释为原因和结果)

 

[java] view plaincopyprint?
  1. package com.xujin;
  2.  
  3. class Base{
  4. private final void test(){
  5. System.out.println("Base,test");
  6. }
  7. public final void test2(){
  8. System.out.println("Base,test2");
  9. }
  10.  
  11. public static void test3(){
  12. System.out.println("Base,test3");
  13. }
  14. }
  15.  
  16. public class Test extends Base
  17. {
  18. //允许子类和父类都有private final存在,但是不允许都有public final存在
  19. private final void test(){
  20. System.out.println("Test,test");
  21. }
  22. //public final void test2(){}//Cannot override the final method
  23.  
  24. //static没有被被重写
  25. public static void test3(){
  26. System.out.println("Test,test");
  27. }
  28.  
  29. public static void main(String...agrs){
  30. Base A = new Test();
  31. Base B = new Test();
  32. //A.test();//The method test() from the type Base is not visible
  33. A.test2();//Base,test2
  34. A.test3();//Base,test3
  35. B.test2();//Base,test2
  36. B.test3();//Base,test3
  37. }
  38. }

转自: