1、先写父类
package com.wyq.Arr;
public class Person {
private String name;
private Gender gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
public Person(String name, Gender gender) {
super();
this.name = name;
this.gender = gender;
}
public Person() {
super();
}
}
enum Gender{
男,女
}
2、再写子类1
package com.wyq.Arr;
public class Teacher extends Person{
private int teachAge;
public int getTeachAge() {
return teachAge;
}
public void setTeachAge(int teachAge) {
this.teachAge = teachAge;
}
public Teacher(String name, Gender gender, int teachAge) {
super(name, gender);
this.teachAge = teachAge;
}
}
3、子类2
package com.wyq.Arr;
public class Student extends Person{
private int sutuNo;
public int getSutuNo() {
return sutuNo;
}
public void setSutuNo(int sutuNo) {
this.sutuNo = sutuNo;
}
public Student(String name, Gender gender, int sutuNo) {
super(name, gender);
this.sutuNo = sutuNo;
}
public Student() {
super();
}
}
4、书写测试类
package com.wyq.Arr;
import java.util.ArrayList;
import java.util.Collection;
public class Test {
public static void main(String[] args) {
//使用泛型,在创建对象的时候就明确了对象的类型为person类
ArrayList<Person> al = new ArrayList<Person>();
//创建三个Person对象
Person p1 = new Person("张三", Gender.女);
Person p2 = new Person("李四", Gender.女);
Person p3 = new Person("王五", Gender.男);
//將person類型添加到集合中
al.add(p1);
System.out.println(al.add(p2));
al.add(p3);
//遍歷輸出
System.out.println(al);
//掉用方法进行遍历
//这种是创建对象的方式
Test t = new Test();
t.show(al);
//这种是不用创建对象的方式
Test.show(al);
/*创建学生类的信息
*
*
* */
//确定类型
ArrayList<Student> alStu = new ArrayList<Student>();
//创建对象,初始化属性
Student stu1 = new Student("张三", Gender.男, 101);
Student stu2 = new Student("李四", Gender.男, 102);
Student stu3 = new Student("王五", Gender.女, 103);
Student stu4 = new Student("马六", Gender.男, 104);
//添加元素
alStu.add(stu1);
System.out.println(alStu.add(stu2));
alStu.add(0, stu4);
alStu.add(stu3);
System.out.println(alStu);
t.fun(alStu);
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
fun(alStu);
System.out.println("+++++++++++++++++++++++++++++++++++++++");
gett(al);
gett(alStu);
Collection<Object> coll = new ArrayList<Object>();
Collection<Teacher> colt = new ArrayList<Teacher>();
// gett(coll);
// gett(colt);
//這裡的連個都報錯了,進一步說明只能是直接傅雷或者直接子類進行調用,其他的都不行
}
//寫了一個方法,用於遍歷集合中元素
public static void show(ArrayList<Person> al){
for (Person per:al){
System.out.println(per.getName()+"\t"+per.getGender());
}
}
//再写一个方法,用户循环遍历集合中的元素
public static void fun(ArrayList<? extends Person> al){
//这种方式表示属性的类型,只能是该类及其直接子类进行调动
for ( Person p:al){
System.out.println(p);
}
}
public static void gett(ArrayList<? super Student> al){
//這裡的這種方法只能是student類及其父類進行調用
for(Object o:al){
System.out.println(o);
}
}
}