A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 付莹 中级黑马   /  2012-11-29 15:12  /  1695 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[ 本帖最后由 付莹 于 2012-11-29 15:56 编辑 ]\n\n//定义父类Dog
class Dog{
//父类方法
public static void bark(){
  System.out.println("汪!汪!!汪!!!");
}
}
//定义子类Jingba
class Jingba extends Dog{
//子类覆写父类方法
public static void bark(){ }
}
public class Bark{
public static void main(String arg[]){
  Dog dog = new Dog();//实例化父类对象
  Dog jingba = new Jingba();//实例化子类对象
  dog.bark();//调用父类方法
  jingba.bark();//调用子类方法
}}
//因为子类覆写子类方法,所以打印结果应该只有父类的"汪!汪!!汪!!!"。
//但每次打印的都是调用了两次父类方法。求高人解释一下。

问题.PNG (7.33 KB, 下载次数: 29)

每次都是调用两次父类方法

每次都是调用两次父类方法

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
子类不能覆盖父类的静态方法,但可以继承
回复 使用道具 举报
静态方法是属于类的而不是属于某个对象,看下面代码
  1. //定义父类Dog
  2. class Dog{
  3. //父类方法
  4. public static void bark(){
  5.   System.out.println("汪!汪!!汪!!!");
  6. }
  7. }
  8. //定义子类Jingba
  9. class Jingba extends Dog{
  10. //子类覆写父类方法

  11. public static void bark(){ }
  12. }
  13. public class Bark{
  14. public static void main(String arg[]){
  15.   Dog dog = new Dog();//实例化父类对象
  16.   Jingba jingba = new Jingba();//实例化子类对象
  17.   dog.bark();//调用父类方法
  18.   jingba.bark();//调用子类方法
  19. }}
  20. //因为子类覆写子类方法,所以打印结果应该只有父类的"汪!汪!!汪!!!"。
  21. //但每次打印的都是调用了两次父类方法。求高人解释一下。
复制代码
这段代码就只打印一次
回复 使用道具 举报
老毕视频里有讲
回复 使用道具 举报
静态方法是随着类加载而加载进内存的,是属于类的。静态方法只能被子类继承,子类覆盖父类静态方法所写的的方法无效,仍然会去执行父类方法。
回复 使用道具 举报
class Dog{
//父类方法
public static void bark(){
  System.out.println("汪!汪!!汪!!!");
}
}
//定义子类Jingba
class Jingba extends Dog{
//子类覆写父类方法
public static void bark(){ }
}
public class Bark{
public static void main(String arg[]){
  Dog dog = new Dog();//实例化父类对象
  //Dog jingba = new Jingba();//实例化子类对象
  Jingba jingba = new Jingba();
  dog.bark();//调用父类方法
  jingba.bark();//调用子类方法
}}

这句话是转型错误:
Dog jingba = new Jingba();//实例化子类对象
应该是:
Jingba jingba = new Jingba();
则就对了
回复 使用道具 举报
这样写也是可以的; 把父类的静态static去掉; 子类相应也去掉static
执行的结果就是你要的一遍了

class Dog{
//父类方法
public  void bark(){
  System.out.println("汪!汪!!汪!!!");
}
}
//定义子类Jingba
class Jingba extends Dog{
//子类覆写父类方法
public  void bark(){ }
}
public class Bark{
public static void main(String arg[]){
  Dog dog = new Dog();//实例化父类对象
  Dog jingba = new Jingba();//实例化子类对象
  //Jingba jingba = new Jingba();
  dog.bark();//调用父类方法
  jingba.bark();//调用子类方法
}}
//因为子类覆写父类方法,所以打印结果应该只有父类的"汪!汪!!汪!!!"。
//但每次打印的都是调用了两次父类方法。求高人解释一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马