创建People类,属性包括:姓名,年龄,性别,行为包括:get/set方法,eat()方法,构造方法,toString()方法
public class People {
private String name;
private int age;
private char sex;
public People() {
}
public People(String name, int age, char sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
@Override
public String toString() {
return "People [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
public void eat() {
System.out.println("十二点了,该吃午饭了");
}
}
在创建Student类,增加属性学号,重写eat()方法、toString()方法;student中特有的study()方法,并重载,
public class Student extends People {
private int studentNo;
private static int studentsnum=0;
public Student(String name, int age, char sex,int studentNo) {
super(name, age, sex);
this.studentNo =studentNo;
studentsnum++;
System.out.println("现在的学生总数为:"+studentsnum);
}
public int getStudentNo() {
return studentNo;
}
public void setStudentNo(int studentNo) {
this.studentNo = studentNo;
}
public void eat() {
System.out.println("还有5分钟就下课了,下课后去食堂吃黄焖鸡米饭。");
}
public void study(int time) {
System.out.println("回家了,自己写作业");
}
public void study(int time,String site) {
System.out.println("在学校和小明一起写作业");
}
@Override
public String toString() {
return "Student [studentNo=" + studentNo + ", name=" + getName() + ", age=" + getAge() + ", sex=" + getSex() + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + studentNo;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (studentNo != other.studentNo)
return false;
return true;
}
}
测试类:Student st1=(Student)obj[2];第一个Student是声明变量类型,就像int a=10中的int一样,括号里的Student则是将Object对象强转成Student类型的对象
public class Test {
public static void main(String[] args) {
HashSet<Student> lists =new HashSet<Student>();
Student stu1=new Student("陈晨", 24, '男', 1);
Student stu2=new Student("阮秀", 22, '女', 2);
Student stu3=new Student("陈阔", 24, '男', 1);
Student stu4=new Student("宋琳", 21, '女', 4);
Student stu5=new Student("张峰", 24, '男', 5);
lists.add(stu1);
lists.add(stu2);
lists.add(stu3);
lists.add(stu4);
lists.add(stu5);
System.out.println(lists.size());
for(Object show:lists) {
System.out.println(show);
}
Object[] objs= lists.toArray();
Student st1=(Student)objs[2];
st1.eat();
People p1=new People();
p1.eat();
st1.study(12);
st1.study(12,"学校");
}
}
利用HashSet的去重原理,在Student中重写了hashcode()及equals()方法,规定当学号相同时则认为是同一个对象,因此虽然声明了Student类型有5个,并添加到lists中,但通过HashSet查看lists的大小时,结果是4.运行结果图如下: