黑马程序员技术交流社区

标题: 继承打印的问题 [打印本页]

作者: 付莹    时间: 2012-11-29 15:12
标题: 继承打印的问题
[ 本帖最后由 付莹 于 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, 下载次数: 25)

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

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

作者: 奚华    时间: 2012-11-29 15:21
子类不能覆盖父类的静态方法,但可以继承
作者: 奚华    时间: 2012-11-29 15:23
静态方法是属于类的而不是属于某个对象,看下面代码
  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. //但每次打印的都是调用了两次父类方法。求高人解释一下。
复制代码
这段代码就只打印一次
作者: 黑马_郑亮新    时间: 2012-11-29 15:23
老毕视频里有讲

作者: 冯盼    时间: 2012-11-29 16:12
静态方法是随着类加载而加载进内存的,是属于类的。静态方法只能被子类继承,子类覆盖父类静态方法所写的的方法无效,仍然会去执行父类方法。
作者: 孙万利    时间: 2012-11-29 17:58
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();
则就对了

作者: 孙万利    时间: 2012-11-29 18:00
这样写也是可以的; 把父类的静态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();//调用子类方法
}}
//因为子类覆写父类方法,所以打印结果应该只有父类的"汪!汪!!汪!!!"。
//但每次打印的都是调用了两次父类方法。求高人解释一下。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2