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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 coolzhou9527 于 2015-3-12 20:04 编辑

求大神帮忙解释一下,我下面这段代码最后一句为什么是错的,
  1. class Fu
  2. {
  3.         Fu()
  4.         {
  5.                 System.out.println("fu run");
  6.         }
  7. }

  8. class Zi extends Fu
  9. {
  10.         Zi()
  11.         {
  12.                 System.out.println("zi run");
  13.         }
  14. }


  15. class  ExtendsDemo4
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 Zi z = new Zi();
  20.                 z.Zi();//这句为什么有问题
  21.         }
  22. }
复制代码
不吝赐教。。。


12 个回复

倒序浏览
构造函数不能被直接调用,且没有返回值类型,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
回复 使用道具 举报
最后一句根本不需要写了,你new Zi了以后,构造函数已经自动初始化了
回复 使用道具 举报
以前我也犯过这样的错误,以为有括号的都是方法都能够被调用,后来认真看了下视频才知道这个是构造方法,是在当前类初始化的时候被调用的。
回复 使用道具 举报
这里是你的zi类对象调用类zi类的默认构造方法,因为zi类的默认构造方法是保护类型的,只有自己或者子类可以调用,这里在其他类中调用,是访问不到这个方法的
回复 使用道具 举报
构造函数是初始化用的,所以你不能调用zi进行打印输出,如果不是构造函数,那你继承那里,
Zi()
        {
                System.out.println("zi run");
        }
这里应该是void Zi()
{
                System.out.println("zi run");
        }
回复 使用道具 举报
构造函数和一般函数不同,不能直接调用,要new  
回复 使用道具 举报
李忠兵 发表于 2015-3-12 20:40
构造函数不能被直接调用,且没有返回值类型,必须通过new运算符在创建对象时才会自动调用;而一般的方法是 ...

我是想用new 建一个z的对象,然后再调用Zi()这个构造函数的
回复 使用道具 举报
Rorine 中级黑马 2015-3-12 23:57:43
9#
构造方法怎么能被自己调用呢,它有两个特点,一名字跟类名一样,二只有在类初始化的时候会被调用
回复 使用道具 举报
bipanfei 来自手机 中级黑马 2015-3-13 00:03:44
10#
因为new了对象之后,构造函数已经运行了
回复 使用道具 举报
coolzhou9527 发表于 2015-3-12 23:49
我是想用new 建一个z的对象,然后再调用Zi()这个构造函数的

目的是什么?创建对象?没有意义啊
回复 使用道具 举报
在创建对象时就是调用的构造函数
回复 使用道具 举报
coolzhou9527 发表于 2015-3-12 23:49
我是想用new 建一个z的对象,然后再调用Zi()这个构造函数的

你z就是一个Zi类型的对象;Zi z = new Zi();实例化了一个Zi的对象z;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马