黑马程序员技术交流社区

标题: 关于继承的一点小疑惑! [打印本页]

作者: 精彩生活向钱看    时间: 2013-6-2 23:09
标题: 关于继承的一点小疑惑!
  1. class Text
  2. {
  3.             
  4.         public static void main (String [] args)

  5.         {
  6.         Newphone p=new Newphone();
  7.         p.newshow();       
  8.         }
  9. }
  10. class Phone
  11. {        static void call()
  12.               {}
  13.         static void show()
  14.         {
  15.                 System.out.println("number");
  16.         }

  17. }
  18. class Newphone extends Phone
  19. {
  20.          static void  newshow(){
  21.         System.out.println("name");
  22.         System.out.println("pic");
  23.         }


  24. }

复制代码
请问大家在我的代码中我调用的事p.newshow这个函数,这个函数所在的类是Phone这个类的子类啊,那么在我执行newshow这个函数的时候,打印的结果应该是number,name,pic啊,为什么正确的打印结果没有number呢,请大家帮忙答疑,谢谢各位了!!
作者: 山鹰    时间: 2013-6-2 23:50
本帖最后由 山鹰 于 2013-6-2 23:52 编辑

在newShow()中没有调用show()方法怎么会执行呢?  如果你在父类的无参构造函数中输出"name"那么在创建子类对象的时候会默认的调用
  1. public class Phone {

  2.                 static void call(){
  3.          
  4.          }
  5.         static void show(){
  6.          
  7.                System.out.println("number");
  8.          
  9.      }
  10. }
  11. public class NewPhone extends Phone{
  12.         
  13.          static void  newShow(){
  14.                  
  15.                    Phone.show();  //<font color="red">这样可以调用show()中的输出语句</font>
  16.                    System.out.println("name");
  17.                   
  18.                    System.out.println("pic");
  19.    }
  20. }
  21. public class Text {
  22.         
  23.         public static void main(String[] args) {
  24.                
  25.                 NewPhone p = new NewPhone();
  26.                
  27.                 p.newshow();
  28.         }

  29. }
复制代码

作者: 小冰块    时间: 2013-6-3 00:08
因为子类虽然可以继承静态方法,但是不能覆盖,因为静态方法是在编译时就确定的,而不是执行子类对象时才确定。
作者: 小冰块    时间: 2013-6-3 00:11
啊,我好像看错问题了,你想要在子类中的方法中使用父类的方法就得调用啊,在newshow里加上“super.show();”就可以了。
作者: 孔雀东南飞    时间: 2013-6-3 06:48
楼主:
1、在这里你没有调用show()方法,当然不会打印。
2、要想调用该方法,你可以p.show()    或   Phone.show()。
3、另一种方式就是
class Phone
{
     Phone()
     {
            System.out.println("number");
     }
}


作者: 郑锐    时间: 2013-6-3 09:49
你调用的是子类里面的newshow,和父类里面的show没有关系。如果你想输出number。需要在newshow里面调用一下父类的show方法。

作者: 狂飙的yellow.co    时间: 2013-6-3 22:20
哥们,子类的方法可以覆盖父类的方法————————————————————————

但是子类的不能覆盖父类的 静态方法  就是 由static修饰的方法

static 顾名思义,就是静态的,他是方法的,他属于这个类,由于是类的方法,他可以直接引用类名来引用方法,也可以通过类的对象来引用这个方法,他既不能被子类覆盖,也不能被子类继承。简单的说,他是在编译的时候就和类帮定在一起了,不能被运行时动态加载。

那么就不能被覆盖,结果就是 number 了





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