黑马程序员技术交流社区

标题: 面向对象 [打印本页]

作者: 高薇    时间: 2012-8-1 08:42
标题: 面向对象
class Student
{
        Student(String name,int age,int score)
        {

        }
   private        String name;
   public void setName(String name)
           {
                        this.name=name;
                }
   public String getName()
                {
               
                return name;
                }

        private int    age;
        public void  setAge(int age)
                {
                        this.age=age;
                }
        public int getAge()
                {
                        return age;
                }
        private int    score;
        public void setScore(int score)
                {
                        this.score=score;
                }
        public int getScore(int score)
                {
                        return score;
                }
        void show()
                {
                System.out.println(name+"的年龄为"+age+"岁,成绩为"+score);
        }
}
class StudentDemo
{
        public static void main(String[] args)
                {
                        Student s1=new Student("zhagnsan",13,89);
                        s1.show();
            }
}
请问,为什么显示的结果都没有赋值呢?
作者: 艾衍年    时间: 2012-8-1 08:49
你想利用构造函数进行初始化,但你的构造函数里没进行任何操作啊,你改成如下代码试试
Student(String name,int age,int score)
         {
              this.name = name;
              this.age = age;
             this.score = score;
        }
作者: 艾衍年    时间: 2012-8-1 09:01
而且,你的show方法能这么用吗??成员变量都是私有的啊
class Print     //Print类
{
        public void sprint(Student s)  //打印方法sprint,返回值类型为viod,参数是Student[] Student
        {
              System.out.println("姓名:"+s.getName()+" "+"年龄:"+s.getAge()+" "+
                                        "成绩:"+s.getScore());
        }
}
作者: 高薇    时间: 2012-8-1 09:03
不是说构造函数不用写return语句的嘛,那怎么它自己就不能初始化呢?
作者: 艾衍年    时间: 2012-8-1 09:05
好吧,我错了,可以那么用,刚试验了一下,嘿嘿
作者: 艾衍年    时间: 2012-8-1 09:08
艾衍年 发表于 2012-8-1 09:01
而且,你的show方法能这么用吗??成员变量都是私有的啊
class Print     //Print类
{

好吧,我错了,show方法可以那么用,刚试验了一下,嘿嘿不要被我误导啦亲
作者: 高薇    时间: 2012-8-1 09:15
谢谢上面帅哥的回答啦!{:soso_e142:}
问题已解决
作者: 刘真    时间: 2012-8-1 09:17
艾衍年 发表于 2012-8-1 09:01
而且,你的show方法能这么用吗??成员变量都是私有的啊
class Print     //Print类
{

此show()可以这样用啊,因为它是在Student类定义的,类访问自己的成员可以直接调用的。
作者: 余清兰    时间: 2012-8-1 09:18
如果要给成员赋值,有两种方式:一种是在新建对象的时候就把实际参数传值给对应的类里的构造函数的形式参数,这就是类的实例化,让对象一初始化就有值,
所以构造函数是给对象初始化的。
另一种是在没有构造函数系统会有一个隐式的构造函数,所以才可以新建立对象,然后再用对象名.set成员()的方法来设置成员的值,
用对象名.get成员()的方法来获取成员的值,你这里用show()方法获取成员变量的值,所以可以直接用对象名.show()来获取成员的值
但由于你在构造函数的时候虽然有形式参数,但是没有把传进来的参数进行赋值,应在构造函数里写为this.name=name;this.ag=age;this.score=score;
具体代码如下:
Student(String name,int age,int score)
{
        this.name=name;
        this.ag=age;
        this.score=score;
}
这样就可在new对象的时候让对象一初始化就有值。


另一种方法是,如果你没有写这个构造函数Student(String name,int age,int score)
{
        this.name=name;
        this.ag=age;
        this.score=score;
}
那么会有一个隐式的Student(){}构造函数,之所有对新建对象,就是因为有它
那么就应该这样来给成员赋值,并获取值
class StudentDemo
{
        public static void main(String[] args)
                {
                        Student s1=new Student();
           s1.setName(zhangsan);
        s1.setAge(23);
        s1.setScore(89);
                        s1.show();
            }
}

作者: 艾衍年    时间: 2012-8-1 09:33
刘真 发表于 2012-8-1 09:17
此show()可以这样用啊,因为它是在Student类定义的,类访问自己的成员可以直接调用的。 ...

恩,明白了,刚是自己想的,没想清楚也没试验,感谢
作者: 王峰    时间: 2012-8-1 11:35
//楼主啊,一般格式这样写,我给你写下边了,这样写就对了
class Student
{
        //变量声明一般都放在这里,。。楼主看好
          private String name;
          private int    age;
          private int    score;
          //有参数构造方法里面初始化对象中的变量赋值,如同,this.name=name;这样该类初始化时,才能对该对象实例赋值
        Student(String name,int age,int score)
        {
                this.name = name;
            this.age = age;
           this.score = score;
        }
   
       public void setName(String name)
           {
                        this.name=name;
                }
       public String getName()
                {
               
                return name;
                }

      
        public void  setAge(int age)
                {
                        this.age=age;
                }
        public int getAge()
                {
                        return age;
                }
     
        public void setScore(int score)
                {
                        this.score=score;
                }
        public int getScore(int score)
                {
                        return score;
                }
        void show()
                {
                System.out.println(name+"的年龄为"+age+"岁,成绩为"+score);
        }
}
class StudentDemo
{
        public static void main(String[] args)
                {
                        Student s1=new Student("zhagnsan",13,89);
                        s1.show();
            }
}






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