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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© MGC 中级黑马   /  2014-7-24 16:42  /  1680 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class fu
{
         fu()
        {
                System.out.println("a");
        }
       
}

class SubFu extends fu
{
         void Subfu()
        {
                System.out.println("b");
        }
}

class zi extends SubFu
{
         zi()
        {
                System.out.println("c");
        }
}

public class lianxi
{
        public static void main(String[]args)
        {
                zi c=new zi();
                               
        }
}

为什么SubFu()一定要有void?为什么最后结果输出的不是a,b,c?

15 个回复

倒序浏览
好奇怪。。。
回复 使用道具 举报
构造函数是规定格式,是没有返回类型。如果写成 void 返回值类型 相当于重新定义了一个函数。不能起到构造函数的作用。    ps:我也是新手,不知道对不对。
回复 使用道具 举报
我怎么觉得第三个写错了class zi中主函数自己 new zi。。。。。
回复 使用道具 举报
初步看了一下,先不说结果,有两个问题
1. 下面这个类的定义中的构造方法有问题,构造方法是没有任何类型的,但是可以用修饰符来修饰,例如private,你用了void来定义,这样的话就不是构造函数了,在new zi()的时候访问的是SubFu的默认的构造方法,所以是不会打印b,最后结果应该是a,c
class SubFu extends fu
{
         void Subfu()
        {
                System.out.println("b");
        }
}
2. public class lianxi,类名没大写
回复 使用道具 举报 1 0
还有关于你的这个问题:为什么SubFu()一定要有void?
你仔细看看你定义的方法和类名是否一致
回复 使用道具 举报
MGC 中级黑马 2014-7-24 20:29:46
7#
J.twt 发表于 2014-7-24 20:05
初步看了一下,先不说结果,有两个问题
1. 下面这个类的定义中的构造方法有问题,构造方法是没有任何类型的 ...

太感谢了
回复 使用道具 举报
首先 您的第一个问题:为什么必须有void
不晓得您是否知道成员函数和构造函数的区别在哪里。它们之间最大的一个区别就在于是否有返回值。
构造函数在定义上是不允许有返回值的,所以必须有void应该也知道为什么了吧?因为编译器将其当做了一个成员函数。 构造函数的变量名和类名必须一致,正因为你的大小写问题所以必须要加void。

其次 您的第二个问题: 为什么结果不是a b c
您的主方法中在堆内存中开辟了一个空间存储zi类的对象,在此过程中,
可能子类对象会调用父类的一些函数,所以创建对象时,会自动调用其父类的构造方法,您的SubFu由于添加void的原因并非构造函数,所以并没有进行调用。所以打印的结果为a c

最后一个问题就是 希望能改变一下写代码的态度,这种代码阅读性很差,也有可能会因此造成如同问题一的情况,所以请按照规范写代码,毕竟这是自己亲手写出来的代码,写出来了就要对它负责不是么,我也是个新手,也在学习中,希望大家能共同进步。
回复 使用道具 举报
kakasa 中级黑马 2014-7-24 21:57:36
9#
我就挑个小毛病吧

上面Sub”F“u,下面是Sub"f"u。。

回复 使用道具 举报
MGC 中级黑马 2014-7-24 22:11:17
10#
ZhangYL 发表于 2014-7-24 20:33
首先 您的第一个问题:为什么必须有void
不晓得您是否知道成员函数和构造函数的区别在哪里。它们之间最大 ...

谢谢,这些坏习惯我以后会注意的
回复 使用道具 举报
你的类名是SubFu而方法名是:Subfu,构造函数的方法名要和类名一模一样,所以zi继承的是SubFu的系统给予的默认构造函数,打印结果应该是ac
回复 使用道具 举报
通过大家的回答,我感觉这个问题不是楼主不会,只是粗心大意造成的。这也不怪楼主,有时一个很小的问题,特别是代码长的还很像,自己看好几遍也发现不了问题,等让大家一看就一眼就看出了,自己也恍然大悟了!小问题,希望楼主再接再厉,大家互相帮助学习!:)
回复 使用道具 举报
二楼回复的特别详细。。。

看二楼的就行了。。重复的话,就不再说一遍了。。
回复 使用道具 举报
MGC 中级黑马 2014-7-25 00:34:04
14#
席杰 发表于 2014-7-25 00:14
通过大家的回答,我感觉这个问题不是楼主不会,只是粗心大意造成的。这也不怪楼主,有时一个很小的问题,特 ...

谢谢,粗心这个问题挺严重的,要改
回复 使用道具 举报
童鞋们全都正解了

void Subfu()不是构造方法
回复 使用道具 举报
学习了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马