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以及无访问修饰符的也一样)。
示例:(注释为原因和结果)
[java] view plaincopyprint?
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培训、成都PHP培训找最专业的成都软件培训机构成都达内。!成都java培训官网:http://www.