代码方法与技巧
(1)toString();的拼接大法
父类 @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", sex=" + sex + ", age=" + age + '}';
老师子类
@Override public String toString() { return "Teacher{" + "work_age=" + work_age + '}' + super.toString(); //拼接大法 }
学生子类 @Override public String toString() { return "Student{" + "stu_id='" + stu_id + '\'' + '}' + super.toString(); //拼接大法 }
效果图
稍稍的美化一下~~~
学生子类
@Override public String toString() { return "Student{" + super.toString() + " stu_id='" + stu_id + '\'' + '}'; //拼接大法 }
老师子类
@Override public String toString() { return "Teacher{" + super.toString() + " work_age=" + work_age + '}' ; //拼接大法 }
效果图
(2)编写一个输出信息的方法,这样体现封装
syudy();调用子类本身方法,不能加super
super.basicINfo() 和 basicINfo() 都可以使用,调用父类基本信息
play() 属于 @Override 重写方法
//编写一个输出信息的方法,这样体现封装
public void printInfo() {
System.out.println("学生的信息:");
// System.out.println(super.basicINfo()); //调用父类基本信息
System.out.println(basicINfo()); //两种都可以
System.out.println("学号:" + stu_id);
study(); //组合, 变化万千
System.out.println(play());
}
(3)封装思想
student.printInfo(); teacher.printInfo(); 用student/teacher对象调用方法
//测试学生 Student student = new Student("小明", '男', 15, "00023102"); student.printInfo(); //封装的思想 //测试老师 Teacher teacher = new Teacher("张飞", '男', 30, 5); System.out.println("-----------------"); teacher.printInfo(); //封装的思想
(4)定义多态数组
Person[] people = new Person[4]; people[0] = new Student("mary", '男', 20, "201945533"); people[1] = new Student("maiyi", '女', 24, "201945563"); people[2] = new Teacher("Arily", '男', 40, 20); people[3] = new Teacher("marly", '男', 45, 25);
(5) test()方法用于判断是学生类还是老师类
public void test(Person p){ if (p instanceof Student) { ((Student) p).study(); } else if (p instanceof Teacher) { ((Teacher) p).teach(); } else { System.out.println("do nothing..."); } }
(6)比较数组种元素大小,通用方法
//使用冒泡排序
Person tmp = null; //临时变量,用于交换
for (int i = 0; i < people.length - 1; i++) { //外层循环
for (int j = 0; j < people.length - 1 - i; j++) { //内层循环
//并按照age 从大到小进行排序,如果前面的人age < 后面人的年龄,就是交换
//要求按照名字的长度从小到大 persons[i].getName().length
// if (people[j].getAge() < people[j+1].getAge()) {
if (people[j].getAge() < people[j + 1].getAge()) {
tmp = people[j];
people[j] = people[j + 1];
people[j + 1] = tmp;
}
}
}
System.out.println("排序后的效果");
for (int j = 0; j < people.length; j++) {
System.out.println(people[j].toString());//默认与toString相绑定(到自己的子类)
}
代码
1.父类 Person.java
package OOPHomework_.Homework08;
public class Person {
private String name;
private char sex;
private int age;
public Person(String name, char sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//编写一个play 方法,把共有的输出内容写到父类
public String play() {
// return getName() ;
return name + "爱玩";
}
//返回一个基本信息
/*
* 姓名: 张飞
* 年龄:30
* 性别:男
* */
public String basicINfo() {
return "姓名: " + name + "\n年龄: " + age + "\n性别: " + sex;
}
// @Override
// public String toString() {
// return
// "name='" + name + '\'' +
// ", sex=" + sex +
// ", age=" + age
// ;
// }
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", sex=" + sex +
", age=" + age +
'}';
}
}
2.子类 Teacher.java
package OOPHomework_.Homework08;
public class Teacher extends Person{
//特有属性
// private String name;
// private char sex;
// private int age;
private int work_age;
//构造器
public Teacher(String name, char sex, int age, int work_age) {
super(name, sex, age);
this.work_age = work_age;
}
//方法
public void teach() {
System.out.println(getName() + " 我承诺,我会认真教学");
}
@Override
public String play() {
return super.play() + "象棋";
}
//输出信息方法
public void printInfo() {
System.out.println("老师的信息:");
System.out.println(super.basicINfo());
System.out.println("工龄: " + work_age);
teach();
System.out.println(play());
}
@Override
public String toString() {
return "Teacher{" + super.toString() +
" work_age=" + work_age +
'}' ; //拼接大法
}
// @Override
// public String toString() {
// return "Teacher{" +
// "work_age=" + work_age +
// '}' + super.toString(); //拼接大法
// }
}
3.子类 Student.java
package OOPHomework_.Homework08;
public class Student extends Person{
//特有属性
// private String name;
// private char sex;
// private int age;
private String stu_id;
//构造器
public Student(String name, char sex, int age, String stu_id) {
super(name, sex, age);
this.stu_id = stu_id;
}
public String getStu_id() {
return stu_id;
}
public void setStu_id(String stu_id) {
this.stu_id = stu_id;
}
//方法
public void study() {
System.out.println(getName() + " 我承诺,我会好好学习");
}
/*学生爱玩足球
* @return
* */
@Override
public String play() {
return super.play() + "足球";
}
//编写一个输出信息的方法,这样体现封装
public void printInfo() {
System.out.println("学生的信息:");
// System.out.println(super.basicINfo()); //调用父类基本信息
System.out.println(basicINfo()); //两种都可以
System.out.println("学号:" + stu_id);
study(); //组合, 变化万千
System.out.println(play());
}
@Override
public String toString() {
return "Student{" + super.toString() +
" stu_id='" + stu_id + '\'' +
'}'; //拼接大法
}
//
// @Override
// public String toString() {
// return "Student{" +
// "stu_id='" + stu_id + '\'' +
// '}' + super.toString(); //拼接大法
// }
}
4.运行代码 Homework08_.java
package OOPHomework_.Homework08;
public class Homework08_ {
public static void main(String[] args) {
//测试学生
Student student = new Student("小明", '男', 15, "00023102");
student.printInfo(); //封装的思想
//测试老师
Teacher teacher = new Teacher("张飞", '男', 30, 5);
System.out.println("-----------------");
teacher.printInfo(); //封装的思想
Person[] people = new Person[4];
people[0] = new Student("mary", '男', 20, "201945533");
people[1] = new Student("maiyi", '女', 24, "201945563");
people[2] = new Teacher("Arily", '男', 40, 20);
people[3] = new Teacher("marly", '男', 45, 25);
Homework08_ homework08_ = new Homework08_();
homework08_.bubbleSort(people);
//遍历数组,调用test方法
for (int i = 0; i < people.length; i++) { //遍历多态数组
homework08_.test(people[i]); //用homework08_对象调用test方法
// test用于判断是学生还是老师 people[i]传入到test中去
}
}
public void test(Person p){
if (p instanceof Student) {
((Student) p).study();
} else if (p instanceof Teacher) {
((Teacher) p).teach();
} else {
System.out.println("do nothing...");
}
}
public void bubbleSort(Person[] people){
//使用冒泡排序
Person tmp = null; //临时变量,用于交换
for (int i = 0; i < people.length - 1; i++) { //外层循环
for (int j = 0; j < people.length - 1 - i; j++) { //内层循环
//并按照age 从大到小进行排序,如果前面的人age < 后面人的年龄,就是交换
//要求按照名字的长度从小到大 persons[i].getName().length
// if (people[j].getAge() < people[j+1].getAge()) {
if (people[j].getAge() < people[j + 1].getAge()) {
tmp = people[j];
people[j] = people[j + 1];
people[j + 1] = tmp;
}
}
}
System.out.println("排序后的效果");
for (int j = 0; j < people.length; j++) {
System.out.println(people[j].toString());//默认与toString相绑定(到自己的子类)
}
}
}