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
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多态性的两个特殊情况
- Java多态性的两个特殊情况
- Java多态性的两个特殊情况
- Java命名惯例的两个特殊情况
- 不使用第三个变量的情况下交换两个变量中存储的值(Java)
- java 异常处理的一些特殊情况
- 浅析Java程序异常处理的特殊情况
- Java程序异常处理的特殊情况
- java使用smb 远程访问共享文件夹 密码有特殊字符 解决情况
- java replaceall方法替换String的几种特殊情况
- 在Java中有两个非常特殊的变量:this和super
- java实现输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head
- 学习笔记-JAVA-考点10-什么情况下需要重写equals和hashcode()两个方法?
- Java中的两个特殊变量this和super
- Java中的两个特殊变量this和super
- Java程序异常处理的特殊情况
- Java中的两个特殊变量this和super
- Java中的两个特殊变量this和super
- Java:子类调用超类方法的一种特殊情况
- JAVA SAX parser characters 方法解析节点内容为两个的情况