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

© 魏亮 中级黑马   /  2012-9-19 22:36  /  1200 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;
  2. class ArrayTest2
  3. {
  4.         public static void sop(Object obj)
  5.         {
  6.                 System.out.println(obj);
  7.         }
  8.         public static void main(String[] args)
  9.         {
  10.                 ArrayList al = new ArrayList();
  11.                 al.add(new Person("zhangsan01",20));
  12.                 al.add(new Person("zhangsan02",21));
  13.                 al.add(new Person("zhangsan03",22));
  14.                 al.add(new Person("zhangsan04",23));
  15.                 al=SingleElement(al);
  16.                 Iterator it =al.iterator();
  17.                 while (it.hasNext())
  18.                 {
  19.                         Person p=(Person)it.next();
  20. <font color="#ff0000">                        sop(p.name+p.age);</font>
  21.                 }
  22.         }
  23.         public static ArrayList SingleElement(ArrayList al)
  24.         {
  25.                 ArrayList al1 = new ArrayList();
  26.                 for (Iterator it = al.iterator();it.hasNext() ; )
  27.                 {
  28.                         Object obj = it.next();
  29.                         if(!al1.contains(obj))
  30.                                 al1.add(obj);
  31.                 }
  32.                 return al1;
  33.         }
  34. }
  35. class Person
  36. {
  37.         String name;
  38.         int age ;
  39.         Person(String name,int age)
  40.         {
  41.                 this.name=name;
  42.                 this.age=age;
  43.         }
  44. <font color="#ff0000">        /*                     \\在没写下面的注释内容时,就会报下面的错误,。只要写上就一切正常。让我迷惑的是我上方调用
  45.         public String getName() \\ 一直是p.name+p.age  ,也就是说一直没用这个下面的两个方法。那为什么一定要写上
  46.         {                                      \\呢??
  47.                 return name;
  48.         }
  49.         public int getAge()
  50.         {
  51.                 return age;
  52.         }
  53.         */</font>


  54. }
复制代码

4 个回复

倒序浏览
本帖最后由 彭润生 于 2012-9-19 22:55 编辑

我运行的很正常啊,没什么方法不存在的错误啊
回复 使用道具 举报
  1. package cn.itcast.CollectionFrameWork;
  2. import java.util.*;
  3. class ArrayTest2
  4. {
  5.         public static void sop(Object obj)
  6.         {
  7.                 System.out.println(obj);
  8.         }
  9.         public static void main(String[] args)
  10.         {
  11.                 ArrayList al = new ArrayList();
  12.                 al.add(new Person("zhangsan01",20));
  13.                 al.add(new Person("zhangsan02",21));
  14.                 al.add(new Person("zhangsan03",22));
  15.                 al.add(new Person("zhangsan04",23));
  16.                 al=SingleElement(al);
  17.                 Iterator it =al.iterator();
  18.                 while (it.hasNext())
  19.                 {
  20.                         Person p=(Person)it.next();
  21.                        sop(p.getName()+"..."+p.getAge());
  22.                 }
  23.         }
  24.         public static ArrayList SingleElement(ArrayList al)
  25.         {
  26.                 ArrayList al1 = new ArrayList();
  27.                 for (Iterator it = al.iterator();it.hasNext() ; )
  28.                 {
  29.                         Object obj = it.next();
  30.                         if(!al1.contains(obj))
  31.                                 al1.add(obj);
  32.                 }
  33.                 return al1;
  34.         }
  35. }
  36. class Person
  37. {
  38.       private  String name;
  39.        private int age ;
  40.         Person(String name,int age)
  41.         {
  42.                 this.name=name;
  43.                 this.age=age;
  44.         }
  45.                         //在没写下面的注释内容时,就会报下面的错误,。只要写上就一切正常。让我迷惑的是我上方调用
  46.        public String getName() // 一直是p.name+p.age  ,也就是说一直没用这个下面的两个方法。那为什么一定要写上
  47.         {                                   //呢??
  48.                 return name;
  49.         }
  50.         public int getAge()
  51.         {
  52.                 return age;
  53.         }
  54.         


  55. }
复制代码
这个问题可以这样来理解。
一:如果你没有写下面2个get()方法;可以用p.name+p.age,因为你把你的name和age全赋值给了Person类里的属性了。
而一般我们为了不让其他类,改变自己类的属性,会把属性定义成private私有变量,通过set()设置值,get()来获取值,
以达到了封装的效果。
二:写了2个get()方法后,通过p.getName()+p.getAge()来获取值,把Person类的属性私有化就不会让他的属性被其他类操控了。
不对之处求指正。
回复 使用道具 举报


import java.util.*;
class ArrayTest2
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();
                al.add(new Person("zhangsan01",20));
                al.add(new Person("zhangsan02",21));
                al.add(new Person("zhangsan03",22));
                al.add(new Person("zhangsan04",23));
                al=SingleElement(al);
                Iterator it =al.iterator();
                while (it.hasNext())
                {
                        Person p=(Person)it.next();
                      sop(p.name+p.age);
                }
        }
        public static ArrayList SingleElement(ArrayList al)
        {
                ArrayList al1 = new ArrayList();
                for (Iterator it = al.iterator();it.hasNext() ; )
                {
                        Object obj = it.next();
                        if(!al1.contains(obj))
                                al1.add(obj);
                }
                return al1;
        }
}
class Person
{
        String name;
        int age ;
        Person(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
}
上述代码运行正常啊
不过
通常name和age定义成private的,这时我们对外提供set和get方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马