staic 方法在继承时重写的一点认识

本文通过一个具体的Java代码示例,探讨了当使用父类引用指向子类对象时,如何区分调用静态方法与实例方法。特别是对于静态方法不可被重写这一特性进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我先给出一段代码,你可以测试一下输出的结果是什么,和你想的是不是一样,如果是一样的,或许我写的东西不会给你带来任何帮助,若不是,到可以看看,我们可以共同探讨……

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的菜鸟,所以写的可能不是很规范,很透彻,且这也是我学习中遇到的困惑,所以贴出来和大家分享一下,若有不足之处,不吝赐教……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值