继承,重写,静态方法的混合

枫_林 2017-08-23 11:30:13
大神过来帮我解答一下,在此先谢了!
...全文
531 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SexyCode 2017-08-29
  • 打赏
  • 举报
回复
首先要知道,为什么需要重写(Override)? 因为一个对象里不能有两个签名一样的方法。 但是,static 方法不是在对象中的,是在类,既然A和B是两个不同的类,那么也就不存在static方法重写的必要了,所以这里不会重写,事实上,Java称之为Hiding. 参考 https://stackoverflow.com/questions/2475259/can-i-override-and-overload-static-methods-in-java
倚楼听风雨 2017-08-28
  • 打赏
  • 举报
回复
static修饰的方法为类的方法,属于类,不属于对象实例。

A a=new B();
a.show();
这里的a.show(),看似是a这个对象实例调用了show方法,但是由于这是静态方法,不属于a这个对象实例,而属于A这个类, 等同于A.show(),所以结果是AAA
soton_dolphin 2017-08-24
  • 打赏
  • 举报
回复
静态方法不会被继承,只会被子类覆盖,或者说被子类的方法隐藏
自由自在_Yu 2017-08-24
  • 打赏
  • 举报
回复

class A{
	
	public static void me1(){
		System.out.println(1111);
	}
	public void me2(){
		System.out.println(1111);
	}
}
class B extends A{
	@Override
	public static void me1(){
		System.out.println(1111);
	}
	@Override
	public void me2(){
		System.out.println(1111);
	}
}
可以在子类的方法名上加上@Override注解,如果报错就不是重写
自由自在_Yu 2017-08-24
  • 打赏
  • 举报
回复
A 和 B中的两个方法名是一样的,但是没有关系,不是重写
结贴是美德 2017-08-24
  • 打赏
  • 举报
回复
静态方法可以继承,但是只能遮蔽,不能重写。
Adrain4Zhang 2017-08-24
  • 打赏
  • 举报
回复
static修饰的方法属于类。 虽然用对象调用,其实底层依然使用的类名来调用。 a的类型为A。 所以,a.show(); 等价于A.show (); 因此执行的方法依然是A类中的方法!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧