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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 精彩生活向钱看 中级黑马   /  2013-6-2 23:09  /  1644 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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呢,请大家帮忙答疑,谢谢各位了!!

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 山鹰 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
因为子类虽然可以继承静态方法,但是不能覆盖,因为静态方法是在编译时就确定的,而不是执行子类对象时才确定。
回复 使用道具 举报
啊,我好像看错问题了,你想要在子类中的方法中使用父类的方法就得调用啊,在newshow里加上“super.show();”就可以了。
回复 使用道具 举报
楼主:
1、在这里你没有调用show()方法,当然不会打印。
2、要想调用该方法,你可以p.show()    或   Phone.show()。
3、另一种方式就是
class Phone
{
     Phone()
     {
            System.out.println("number");
     }
}

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
你调用的是子类里面的newshow,和父类里面的show没有关系。如果你想输出number。需要在newshow里面调用一下父类的show方法。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
哥们,子类的方法可以覆盖父类的方法————————————————————————

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

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

那么就不能被覆盖,结果就是 number 了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马