关于Java多态性的两个特殊情况

我要分析的两种情况与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以及无访问修饰符的也一样)。


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

package com.xujin;

class Base{
	private final void test(){
		System.out.println("Base,test");
	}
	public final void test2(){
		System.out.println("Base,test2");
	}
	
	public static void test3(){
		System.out.println("Base,test3");
	}
}

 public class Test extends Base
 {
	 //允许子类和父类都有private final存在,但是不允许都有public final存在
	 private final void test(){
		 System.out.println("Test,test");
	 }	 
	 //public final void test2(){}//Cannot override the final method 
	 
	 //static没有被被重写
	 public static void test3(){
		 System.out.println("Test,test");
	 }
	 
	 public static void main(String...agrs){
		 Base A = new Test();
		 Base B = new Test();
		 //A.test();//The method test() from the type Base is not visible
		 A.test2();//Base,test2
		 A.test3();//Base,test3
		 B.test2();//Base,test2
		 B.test3();//Base,test3
	 }
 }


你可能感兴趣的:(java,java,java,java)