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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2012-2-10 21:07  /  2009 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戴振良 于 2012-2-14 00:32 编辑

class test3
{
        String name="小强";
        int age=18;
        public test3()
        {
                System.out.println(name+(--age)+"岁");
        }
}
class test4 extends test3
{
        String sex="男";
        public test4()
        {
                System.out.println(name+":男,"+(++age)+"岁");
        }
}
class test5
{
        public static void main(String args[])
        {
                new test4();
        }        
}

输出结果为:
小强17岁
小强:男,18岁
上次我问到:在test4类中我不是重写了构造函数吗?为什么会打印出两句来呢?  ————这个问题已得到解决
我现在要问的是:我在new test4()的时候,就是想输出test4中的构造函数里语句而已,虽然已经知道为什么会输出两句,可是我要达到的功能却没有实现,
请问有什么方法可以不用调用父类的构造方法的吗?或者其他的解决方法也行。

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

5 个回复

倒序浏览
当父类构造函数无参数或者父类构造函数有默认参数的时候,子类自动调用父类构造函数。
如果你不想用子类调用父类构造函数。可以定义父类构造函数为有参数的构造函数(不带默认参数)。
这样就可以解决你的问题。

评分

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

查看全部评分

回复 使用道具 举报
这是你程序的问题,一般无参构造函数是不写内容的,因为没有调用参数,不进行操作,应该是public test3(){} ,然后传进参数时才进行一些操作,你的test3类中name不应该直接赋值,只定义变量就行了,在创建对象时,给对象的name赋值“张三”,否则你创建的每个test3的对象都叫张三,是不合适的。
       class test3
{
        String name;
        int age;
                public test3()
        {
         
        }
        public test3(String name)
        {
                System.out.println(name+(--age)+"岁");
        }
}
class test4 extends test3
{
        String sex="男";

                public test4(String name)
        {
                super(name);
        }
        public test4(String name,int age)
        {
                System.out.println(name+":男,"+(++age)+"岁");
        }
}
class test5
{
        public static void main(String args[])
        {
                       
                test4 t = new test4("张三",18);
        test4 t1 = new test4("张三");
        }        
}

因为是改的你的代码,所以还是有些乱,以后写代码思路要清晰,不然看着很难受的。

评分

参与人数 1技术分 +2 收起 理由
唐秀启 + 2 呵呵 辛苦了。。

查看全部评分

回复 使用道具 举报
那就不要让test4继承test3,然后在test4中的构造方法把各个属性补齐,在用test4创建对象,因为
已经很明确了,test4继承test3后然后用子类去创建对象,一定会先调用父类的构造方法。

评分

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

查看全部评分

回复 使用道具 举报
当子类调用构造函数会默认调用父类的构造函数,可以带另其一个带参数的构造函数去调用,如果参数过多,可以用赋值给变量,输出你想要的答案。

评分

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

查看全部评分

回复 使用道具 举报
谢谢!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马