您的位置:首页 > 编程语言 > Java开发

Java多态性的两个特殊情况

2013-03-26 15:14 309 查看
我要分析的两种情况与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
}
}

转自:http://www.cdtarena.com/javapx/201303/8067.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java