黑马程序员技术交流社区

标题: 求助啊啊啊啊 啊。对象封装问题 [打印本页]

作者: 孙百鑫    时间: 2013-3-11 22:57
标题: 求助啊啊啊啊 啊。对象封装问题
求助啊
class Person
{
        private String name;
        private int age;
        Person()
        {
                System.out.println("A"+"name="+name+",,age="+age);
                speak();
        }
        Person(String b)
        {
                System.out.println("A"+"name="+name+",,age="+age);
                speak();
        }
        public void setName(String n)
        {
                name=n;
        }
        public String getName()
        {
                return name;
        }
        Person(String n,int c)
        {
                name=n;
                age=c;
                System.out.println("C"+"name="+name+",,age="+age);
                speak();
        }
        void speak()
        {
                System.out.println("cay...............");
        }
}
class PersonDemo1
{
        public static void main(String[] args)
        {
                //Person p=new Person();
                Person p1=new Person("大黄");
                System.out.println(p1.getName);
                //Person p2=new Person("阿凯",28);
                //p.speak();
                //p.speak();
        }
}

作者: 孙百鑫    时间: 2013-3-11 23:00
看了好久。也没啥问题啊。。。。。
作者: 孙百鑫    时间: 2013-3-11 23:01
返回值应该是大黄吧
作者: 徐升2013    时间: 2013-3-11 23:01
本帖最后由 徐升2013 于 2013-3-11 23:03 编辑

你想问的是什么?你那个getName忘写括号了- -汗  问题大了,你不看看你调用的是哪个构造方法- -
作者: 孙百鑫    时间: 2013-3-11 23:05
徐升2013 发表于 2013-3-11 23:01
你想问的是什么?你那个getName忘写括号了- -汗  问题大了,你不看看你调用的是哪个构造方法- - ...

那个括号我看见了。。我改了。。。。但是打印出来的是空啊
作者: 徐升2013    时间: 2013-3-11 23:12
孙百鑫 发表于 2013-3-11 23:05
那个括号我看见了。。我改了。。。。但是打印出来的是空啊

你只传入了一个String类型的参数,所以调用的是Person(String b)这个构造方法!该构造方法只打印了一次,调用了speak一次!所以打印才是空!
作者: 樊玲    时间: 2013-3-11 23:34
class Person
{
        private String name;
        private int age;
        Person()
        {
                System.out.println("A"+"name="+name+",,age="+age);
                speak();
        }
        Person(String n)
        {
                            name=n;                                                                        
                System.out.println("A"+"name="+name+",,age="+age);
                speak();
        }
        public void setName(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
        Person(String n,int c)
        {
                name=n;
                age=c;
                System.out.println("C"+"name="+name+",,age="+age);
                speak();
        }
        void speak()
        {
                System.out.println("cay...............");
        }
}
class PersonDemo1
{
        public static void main(String[] args)
        {
                //Person p=new Person();
                Person p1=new Person("大黄");
                System.out.println(p1.getName());
                //Person p2=new Person("阿凯",28);
                //p.speak();
                //p.speak();
        }
}

注:构造函数未写name=n 前,你的执行结果就会变成Aname=null,,age=0  cay...............null  因为你默认使的是第二个有参构造函数,
但是,没有接收这个名字。所以,name就会为null
当你接收name之后,初始化name 完成,结果变成了,Aname=大黄,,age=0 cay...............大黄
作者: 樊玲    时间: 2013-3-11 23:35
class Person
{
        private String name;
        private int age;
        Person()
        {
                System.out.println("A"+"name="+name+",,age="+age);
                speak();
        }
        Person(String n)
        {
                            name=n;                          //注意这里。。                                                       
                System.out.println("A"+"name="+name+",,age="+age);
                speak();
        }
        public void setName(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
        Person(String n,int c)
        {
                name=n;
                age=c;
                System.out.println("C"+"name="+name+",,age="+age);
                speak();
        }
        void speak()
        {
                System.out.println("cay...............");
        }
}
class PersonDemo1
{
        public static void main(String[] args)
        {
                //Person p=new Person();
                Person p1=new Person("大黄");
                System.out.println(p1.getName());
                //Person p2=new Person("阿凯",28);
                //p.speak();
                //p.speak();
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2