黑马程序员技术交流社区

标题: 关于类的定义,需要一些什么东西,希望高手指点 [打印本页]

作者: 吴小东    时间: 2012-7-13 16:17
标题: 关于类的定义,需要一些什么东西,希望高手指点
看了毕老师的视频,自己总结了一下写了一个简单的Person的类,
其中包括,属性,get和set方法,构造代码块初始属性,构造方法,重写了equals,hashcode,toString方法
定义了一个比较器,
希望高手指点一下 还需要定义一些什么东西。
  1. import java.util.*;
  2. import java.lang.*;

  3. class PersonDemo
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 Person p1 = new Person("lisi",23);
  8.                 Person p2 = new Person("lisi",23);
  9.                 Person p3 = new Person("lisi",213,"bj");
  10.                 sop(p3.getAge());
  11.                 sop(p1.equals(p2));
  12.                 sop(p1.hashCode());
  13.         }
  14.         public static void sop(Object obj)
  15.         {
  16.                 System.out.println(obj);
  17.         }
  18. }
  19. //自定义比较器,实现compara接口,重写其中的compare方法,
  20. //其中还有个一个equals方法,因为在Object类中有equals方法,所以这里可以不用覆盖
  21. class myCompare implements Comparator
  22. {
  23.         public int compare(Object obj1,Object obj2)
  24.         {
  25.                 int num = 0;
  26.                 if (!(obj1 instanceof Person)&&!(obj2 instanceof Person))
  27.                 {
  28.                         throw new RuntimeException("不是合法类型!");
  29.                 }
  30.                 Person p1 = (Person)obj1;
  31.                 Person p2 = (Person)obj2;
  32.                 if (p1.getName()!=p2.getName())
  33.                 {
  34.                         num = p1.getName().compareTo(p2.getName());
  35.                 }
  36.                 if (p1.getName()==p2.getName())
  37.                 {
  38.                         num = (new Integer(p1.getAge())).compareTo(new Integer(p2.getAge()));
  39.                 }
  40.                 return num;
  41.         }
  42. }

  43.         //建立Person类 含有3个成员变量name,age,address和3个构造函数
  44. class Person
  45. {
  46.         private String name;
  47.         private int age;
  48.         private String address;

  49.         //构造代码块,优先于所有构造函数运行,构造函数只能调用一次
  50.         {
  51.                 this.name = "未知";
  52.                 this.age = 0;
  53.                 this.address = "未知";
  54.         }
  55.         //name的get和set方法
  56.         public void setName(String name)
  57.         {
  58.                 this.name=name;
  59.         }
  60.         public String getName()
  61.         {
  62.                 return this.name;
  63.         }
  64.         //age的get和set方法
  65.         public void setAge(int age){
  66.                 if (age > 0 && age < 130 )
  67.                 {
  68.                         this.age=age;
  69.                 }else{
  70.                         this.age=0;
  71.                 }
  72.         }
  73.         public int getAge(){
  74.                 return this.age;
  75.         }
  76.         //address的get和set方法
  77.         public void setAddress(String address)
  78.         {
  79.                 this.address=address;
  80.         }
  81.         public String getAddress()
  82.         {
  83.                 return address;
  84.         }
  85.         //无参构造函数
  86.         public Person()
  87.         {
  88.                
  89.         }
  90.         //带参name和age的构造函数
  91.         public Person(String name,int age)
  92.         {
  93.                 this.name = name;
  94.                 if (age>0 && age<130)
  95.                 {
  96.                         this.age = age;
  97.                 }else
  98.                 {
  99.                         this.age = 0;
  100.                 }
  101.                
  102.         }
  103.         //带参数name和age以及address的构造函数
  104.         public Person(String name,int age,String address)
  105.         {
  106.                 this(name,age);
  107.                 this.address=address;
  108.         }
  109.         //复写Object中的String方法
  110.         public String toString()
  111.         {
  112.                 return "姓名:"+this.name+" 年龄:"+this.age+" 地址: "+this.address;
  113.         }       
  114.         //重写hashCode()方法
  115.         public int hashCode()
  116.         {
  117.                 int result = 17;
  118.                 result = result*37 + name.hashCode() + address.hashCode();
  119.                 result = result*37 + age;
  120.                 return result;
  121.         }
  122.         //重写equals()方法
  123.         public boolean equals(Object obj)
  124.         {
  125.                 return ((obj instanceof Person)&&(name==((Person)obj).name)&&(age==((Person)obj).age)&&(address==((Person)obj).address));
  126.         }
  127. }
复制代码





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