都知道在java中,子类继承父类后可以多态的覆盖父类方法,即使在上线转型使用的时候也是使用子类中的方法,那么在子类继承父类过程中是不是所有的方法及父类属性都能多态呢?让我们看看下面列子:
package test;
import static test_1.PrintDome.*;
/**
* java多态列外的部分
*
* */
public class UpTransDisplay extends SuperPlay{//子类
public int fileNum=1;//子类域中参数,不可多态化
public int getFileNum(){//子类普通方法,多态属性
return fileNum;
}
public int getSuperFileNum(){
return super.fileNum;
}
public static int getStaticNum(){//静态方法不可多态
return 3;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SuperPlay superPlay = new UpTransDisplay();
UpTransDisplay superPlaySon = new UpTransDisplay();
print("superPlay.fileNum: "+superPlay.fileNum+" superPlay.getFileNum: "+superPlay.getFileNum()+" "
+ " superPlay.getStaticNum: "+superPlay.getStaticNum());//可以看到此处编译时已有警告,证明静态方法不可以多态
print("superPlaySon.fileNum: "+superPlaySon.fileNum+" superPlaySon.getFileNum: "+superPlaySon.getFileNum()+" "
+ " superPlaySon.getStaticNum: "+superPlaySon.getStaticNum()+" superPlaySon.getSuperFileNum: "
+superPlaySon.getSuperFileNum());
}
}
class SuperPlay{
public int fileNum=0;
public int getFileNum(){
return fileNum;
}
public static int getStaticNum(){
return 2;
}
}
-------运行结果--------------------
superPlay.fileNum: 0 superPlay.getFileNum: 1 superPlay.getStaticNum: 2
superPlaySon.fileNum: 1 superPlaySon.getFileNum: 1 superPlaySon.getStaticNum: 3 superPlaySon.getSuperFileNum: 0
从上面的列子可以看出,非静态的普通父类方法是可以被子类速覆盖多态的(列子中的getFileNum()方法),然而父类中的静态方法(getStaticNum())和父类中的字段属性fileNum 是无法被子类覆盖多态的。