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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© evar71 中级黑马   /  2014-4-25 17:50  /  1143 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 evar71 于 2014-4-25 19:06 编辑
  1. class Person
  2. {
  3.         void speak()
  4.         {
  5.                 System.out.println("Hi!");
  6.         }
  7.         
  8. }

  9. class Student extends Person
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 new Person.speak; //此处为什么要写成 new Person().speak()  呢,是因为空参数的原因吗

  14.         }
  15. }
复制代码

9 个回复

倒序浏览
本帖最后由 evar71 于 2014-4-25 17:55 编辑

代码好难发,必须一次性复制进去才行啊
回复 使用道具 举报
本帖最后由 世界公民 于 2014-4-25 18:09 编辑

因为Student继承了Person类所以也就继承了父类中的speak()方法,但是因为speak()方法是非静态的方法,所以你直接在Student的静态方法main()中调用speak()是不可以的,除非你把speak()方法前面用static关键字修饰,对于为什么静态方法中无法直接调用非静态方法你因该知道吧。所以要么你把speak()方法静态化,要么先创建一个实例对象再调用speak()方法。。

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
创建对象 类名后加括号 是固定格式。
如果没有参数,就是空括号。
调用函数也是一样,就是一种固定格式,是语法规定的。
回复 使用道具 举报
创建匿名对象来调用方法。
回复 使用道具 举报
谢谢大家,看来还是我基础没学好。
其实这个问题的提出,还是因为对于在类中调用方法创建对象思考的不够深入造成的;
世界公民 解释的很棒,静态方法无法调用非静态成员是关键,所以要么将其静态化,要么实例化;
如果实例化,也就是像楼上所说,利用匿名对象一次性调用,来显示结果。
回复 使用道具 举报
楼主  加油吧  每个人都是从菜鸟学过来的   加油  我也差不多
回复 使用道具 举报
pray 高级黑马 2014-4-25 19:56:20
8#
因为Student继承了Person类所以也就继承了父类中的speak()方法,但是因为speak()方法是非静态的方法,所以你直接在Student的静态方法main()中调用speak()是不可以的,除非你把speak()方法前面用static关键字修饰,对于为什么静态方法中无法直接调用非静态方法你因该知道吧。所以要么你把speak()方法静态化,要么先创建一个实例对象再调用speak()方法。。
回复 使用道具 举报
爱翚 中级黑马 2014-4-25 23:25:03
9#
class Person {
        void speak() {
                System.out.println("Hi!");
        }
       
        /*
         * 将该成员函数通过static修饰为静态的举例
         */
        static void speak1() {
                System.out.println("Hi!");
        }
}

class Student extends Person {
        public static void main(String[] args){
                /*
                 * 1、new Person()是创建Person对象的写法,这个是语法要求
                 * 2、speak()是个成员函数,在调用函数时函数的写法为speak(),这个也是语法要求
                 */
        new Person.speak;
        
        /*
                 * 如果想用类名直接调用类的成员函数,需要将该成员函数通过static修饰为静态的
                 * 举例如下:
                 */
        Person.speak1();
    }
}
回复 使用道具 举报
不是啊 应为java中的方法都会有()括号   person每一个对象中如果不写构造方法JV会为我们加一个默认的构造函数Persion(){};   所以你在new Person()就是在调用Person()这一个方法,然后后面是调用方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马