张飞爱玩象棋,小明爱玩足球;java-多态-综合练习题

 代码方法与技巧

(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相绑定(到自己的子类)
        }
    }
}

运行截图

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值