我先给出一段代码,你可以测试一下输出的结果是什么,和你想的是不是一样,如果是一样的,或许我写的东西不会给你带来任何帮助,若不是,到可以看看,我们可以共同探讨……
class Friut{
static String color="Yellow";
String fSize="small";
static String getFC(){
return color;
}
String getFS(){
return fSize;
}
}
public class Apple extends Friut{
static String appleColor="Green";
String appleSize="BIG";
String getFS(){
return appleSize;
}
static String getFC(){
return appleColor;
}
public static void main(String [] arg){
Friut f=new Apple();
System.out.print(f.getFC());
System.out.print(f.getFS());
}
}
我给出这段代码的输出结果:YellowBIG
疑问来自这里
System.out.print(f.getFC());
为什么它调用的事父类中的方法
System.out.print(f.getFS());
为什么他调用的是子类中的方法
若如此,我们先看这句,Friut f=new Apple();
他是用父类声明,子类来实例化,这是类的强制转化的一种。
我们可以先想一想静态变量和方法与普通变量和方法的区别,可知,静态的是属于类的,在类声明的时候即存在,普通的是属于对象的,需要实例化对象。
那么在这句中Friut f=new Apple();我们是用父类声明,用子类实例化的,
f.getFC()就是调用父类中的静态的方法,
f.getFS()就是调用子类中的普通方法,
当然,如果你用的是Eclipse你可以在子类的
String getFC(){
return appleColor;
}
方法前加@Override你会看到什么, 如果你没有试,我就告诉你吧,会说此方法必须覆盖超类中的方法,所以你也可以理解为,静态方法是不可以重写的,当然,你也可以运行,但是你就要清楚的知道,它是调用父类,还是子类中的方法了。……
Ps:我是个刚刚开始学java的菜鸟,所以写的可能不是很规范,很透彻,且这也是我学习中遇到的困惑,所以贴出来和大家分享一下,若有不足之处,不吝赐教……