- package cn.itcast.CollectionFrameWork;
- 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.getName()+"..."+p.getAge());
- }
- }
- 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
- {
- private String name;
- private int age ;
- Person(String name,int age)
- {
- this.name=name;
- this.age=age;
- }
- //在没写下面的注释内容时,就会报下面的错误,。只要写上就一切正常。让我迷惑的是我上方调用
- public String getName() // 一直是p.name+p.age ,也就是说一直没用这个下面的两个方法。那为什么一定要写上
- { //呢??
- return name;
- }
- public int getAge()
- {
- return age;
- }
-
- }
复制代码 这个问题可以这样来理解。
一:如果你没有写下面2个get()方法;可以用p.name+p.age,因为你把你的name和age全赋值给了Person类里的属性了。
而一般我们为了不让其他类,改变自己类的属性,会把属性定义成private私有变量,通过set()设置值,get()来获取值,
以达到了封装的效果。
二:写了2个get()方法后,通过p.getName()+p.getAge()来获取值,把Person类的属性私有化就不会让他的属性被其他类操控了。
不对之处求指正。 |