本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
50秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 步骤 1 : 父类 步骤 2 : 子类隐藏父类的类方法 步骤 3 : 练习-隐藏 步骤 4 : 答案-隐藏
父类有一个类方法 :battleWin
package charactor;
public class Hero {
public String name;
protected float hp;
//类方法,静态方法
//通过类就可以直接调用
public static void battleWin(){
System.out.println("hero battle win");
}
}
package charactor; public class Hero { public String name; protected float hp; //类方法,静态方法 //通过类就可以直接调用 public static void battleWin(){ System.out.println("hero battle win"); } }
子类隐藏父类的类方法
package charactor;
public class ADHero extends Hero implements AD{
@Override
public void physicAttack() {
System.out.println("进行物理攻击");
}
//隐藏父类的battleWin方法
public static void battleWin(){
System.out.println("ad hero battle win");
}
public static void main(String[] args) {
Hero.battleWin();
ADHero.battleWin();
}
}
package charactor; public class ADHero extends Hero implements AD{ @Override public void physicAttack() { System.out.println("进行物理攻击"); } //隐藏父类的battleWin方法 public static void battleWin(){ System.out.println("ad hero battle win"); } public static void main(String[] args) { Hero.battleWin(); ADHero.battleWin(); } } Hero h =new ADHero(); h.battleWin(); //battleWin是一个类方法 h是父类类型的引用 但是指向一个子类对象 h.battleWin(); 会调用父类的方法?还是子类的方法?
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
2分8秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 Hero h =new ADHero(); h.battleWin(); h= null; h.battleWin(); 虽然h指向的是一个子类对象,但是依然调用的是父类的类方法。 甚至在h指向一个空对象null的时候,也能够成功调用battleWin(). 所以和h指向哪个对象无关,只和h的类型有关系。 当然,也不建议通过对象去调用类方法,而应该直接通过类去调用类方法,从而规避理解上的歧义。 Hero.battleWin(); package charactor;
public class Hero {
public String name;
protected float hp;
//类方法,静态方法
//通过类就可以直接调用
public static void battleWin(){
System.out.println("hero battle win");
}
public static void main(String[] args) {
Hero h =new ADHero();
h.battleWin();
h= null;
h.battleWin();
}
}
package charactor; public class Hero { public String name; protected float hp; //类方法,静态方法 //通过类就可以直接调用 public static void battleWin(){ System.out.println("hero battle win"); } public static void main(String[] args) { Hero h =new ADHero(); h.battleWin(); h= null; h.battleWin(); } }
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2024-07-02
对于静态方法调用的一种简单的理解思路
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2023-07-16
为什么输出的是子类方法
3 个答案
hncj指尖风雨 跳转到问题位置 答案时间:2023-12-29 父类
oops__ 跳转到问题位置 答案时间:2023-08-26 静态方法与类直接关联,而不是与实例对象关联。多态通常是在实例方法上发挥作用,因为实例方法的调用是基于对象的运行时类型来决定的。但是静态方法是直接通过类名调用的,与实例对象无关
1cHIMPANZEE 跳转到问题位置 答案时间:2023-07-29 在Java中,对于类方法(静态方法),编译时会根据引用类型(即变量类型)来决定调用的方法。实际上,类方法并不具有多态性,也不会被子类的重写所影响。由于h是父类类型的引用,即使它指向一个子类对象(ADHero),编译器仍然会根据引用类型(Hero)来决定调用的方法。
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2022-05-11
Hero h =new ADHero(); ——h的类型不是已经转变成 ADHero 了吗?
2021-12-13
大概就是这样吧
2021-07-31
这种代码能提供运行后截图吗?
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 37 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|