当前位置: 首页 > news >正文

面向对象练习题(8)

目录

第一题

第二题

第三题


第一题

思路分析:

1.Person p = new Student();这就是一个向上转型,让父类的引用指向子类的对象,但是向上转型不能访问子类的属性和方法 我们在写代码时看的是编译类型 在运行是看的是运行类型

p.run();

p.eat();

所有只能访问父类的两个方法

2.向下转型只能强转父类的引用,不能强转父类的对象

如果写成Student s = (Student) Person就会报错

应该写成Student s = (Student) p

向下转型语法

子类类型 引用名 =(子类类型)父类引用; 注意是父类的引用

向下转型后可以访问子类的属性和方法

 Student s = (Student) p;//向下转型

因为父类有和子类相同的方法所以只能调用其中之一 具体调用那个根据情况而定

属性没有重写之说,属性的值看编译类型 方法看运行类型

package idea.homework.homework11;public class homework11 {public static void main(String[] args) {//person person = new Person();Person p = new Student();//向上转型  让父类的引用指向子类的对象  不能访问子类的属性和方法//在写代码时看的是编译类型  在运行是看的是运行类型p.run();p.eat();//2)只能强转父类的引用,不能强转父类的对象  如果写成Student s = (Student) Person就会报错//应该写成Student s = (Student) p//向下转型语法   子类类型 引用名 =(子类类型)父类引用;   注意是父类的引用//向下转型后可以访问子类的属性和方法//Student s = (Student) p;//向下转型//因为父类有和子类相同的方法所以只能调用其中之一 具体调用那个根据情况而定//属性没有重写之说,属性的值看编译类型  方法看运行类型s.run();s.eat();s.study();}
}class Person {public void run() {System.out.println("person run");}public void eat() {System.out.println("person eat");}
}class Student extends Person {public void run() {System.out.println("student run");}public void study() {System.out.println("student study..");}
}

第二题

思路分析:

说出==和equals的区别

 ==是比较运算符 ==左右两边是基本数据类型时判断的是两个值是否相同 左右两边是引用类型时默认判断的时地址是否相同

equals方法

在没有重写equals方法时 默认调用object的equals方法判断的时地址是否相同 重写了equals方法后,判断的是两个对象的内容是否相同 equals不能用于基本数据类型 Java所有的类都可以使用equals 

package idea.homework.homework12;public class homework12 {public static void main(String[] args) {//12.说出==和equals的区别/*==是比较运算符==左右两边是基本数据类型时判断的是两个值是否相同左右两边是引用类型时默认判断的时地址是否相同equals方法在没有重写equals方法时 默认调用object的equals方法判断的时地址是否相同重写了equals方法后,判断的是两个对象的内容是否相同equals不能用于基本数据类型Java所有的类都可以使用equals*/}
}

第三题

思路分析:

1.我们要发现,一开始我们在定义学生类和老师类的时候,这两个类中我们都有name age 等属性,所有我们把该属性抽出来,做成一个Person类,这个我们子类子需要继承父类就可以了

2.创建一个Person数组,因为Students和Teacher都继承了Person了所有,可以存放到Person数组中,使用冒泡排序,按照年龄进行排序,注意在比较的时候,比较的是年龄,但是在交换的时候,交换的可不是年龄,因此在定义辅助变量的时候,需要定义一个Person类型的

homework13类

package idea.homework.homework13;public class homework13 {public static void main(String[] args) {/*
(1)做一个Student类,Student类有名称(name),性别(sex),年龄
(age),学号(stu_id),做合理封装,通过构造器在创建对象时将4个属性赋值。
(2)写一个Teacher类,Teacher类有名称(name),性别(sex),年年龄:30 龄(age),工龄(work_age),做合理封装,通过构造器在创建对象时将性别:男 4个属性赋值。
(3)抽取一个父类Person类,将共同属性和方法放到Person类
(4)学生需要有学习的方法(study),在方法里写生“我承诺,我会好王飞爱玩象棋 好学习。 。
(5)教师需要有教学的方法(teach),在方法里写上“我承诺,我会认真教学(6)学生和教师都有玩的方法(play),学生玩的是足球,老师玩的是象棋,此方法是返回字符串的,分别返回“xx爱玩足球”和“xx爱玩象棋”(其中xx分别代表学生和老师的姓名)。因为玩的方法名称都一样,所以 要求此方法定义在父类中,子类实现重写。(7)定义多态数组,里面保存2个学生和2个教师,要求按年龄从高到低排序,
(8)定义方法,形参为Person类型,功能:调用学生的study或教师的teach方法*///创建了一个Person数组,也就是多态数组,该数组可以存放Student 和 Teacher Person[] p = new Person[4];//为数组进行初始化p[0] = new Student("jack", '男', 2);p[1] = new Student("tom", '男', 1);p[2] = new Teacher("many", '男', 3);p[3] = new Teacher("smith", '男', 4);//使用冒泡排序,按照年龄进行排序,注意在比较的时候,比较的是年龄,但是在交换的时候,交换的可不是年龄,因此在定义辅助变量的时候,需要定义一个Person类型的for (int i = 0; i < p.length - 1; i++) {for (int j = 0; j < p.length - 1 - i; j++) {if (p[j].getAge() > p[j + 1].getAge()) {Person tmp = p[j];p[j] = p[j + 1];p[j + 1] = tmp;}}}//遍历数组for (int i = 0; i < p.length; i++) {//在输出p[i]的时候等价于p[i].toString()System.out.println(p[i]);}System.out.println();//遍历数组for (int i = 0; i < p.length; i++) {//对数组中的元素进行比较,如果运行类型是Student那么就调用student中的方法if (p[i] instanceof Student){((Student) p[i]).study();//对数组中的元素进行比较,如果运行类型是teacher那么就调用teacher中的方法}else if (p[i] instanceof Teacher){((Teacher)p[i]).teach();}else {System.out.println("不做处理");}}}}

Person类

package idea.homework.homework13;/*** Person类——父类*/
public class Person {//因为两个子类中,都有name age 等属性,那么我们把共同的部分给提取出来,做成一个父类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;}//    (6)学生和教师都有玩的方法(play),学生玩的是足球,老师玩的是象棋,此方法是返回字符串的,分别返回“xx爱玩足球”和“xx爱玩象棋”
//            (其中xx分别代表学生和老师的姓名)。因为玩的方法名称都一样,所以 要求此方法定义在父类中,子类实现重写。//这是父类特有的方法public String play() {return this.name + "爱玩";}//重新写toString方法是为了方便对象的输出@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", sex=" + sex +", age=" + age +'}';}
}

Student类

package idea.homework.homework13;public class Student extends Person{
//    (1)做一个Student类,Student类有名称(name),性别(sex),年龄
//            (age),学号(stu_id),做合理封装,通过构造器在创建对象时将4个属性赋值。private String stu_id;public Student(String name, char sex, int age) {super(name, sex, age);}public String getStu_id() {return stu_id;}public void setStu_id(String stu_id) {this.stu_id = stu_id;}//(4)学生需要有学习的方法(study),在方法里写生“我承诺,我会好王飞爱玩象棋 好学习。 。public void study(){System.out.println(super.getName()+"我会好好学习");}@Overridepublic String play() {return "象棋";}
}

Teacher类

package idea.homework.homework13;public class Teacher extends Person {//(2)写一个Teacher类,Teacher类有名称(name),性别(sex),年年龄:30 龄(age),工龄(work_age),做合理封装,通过构造器在创建对象时将性别:男 4个属性赋值。private int work_age;public Teacher(String name, char sex, int age) {super(name, sex, age);}public int getWork_age() {return work_age;}public void setWork_age(int work_age) {this.work_age = work_age;}//(5)教师需要有教学的方法(teach),在方法里写上“我承诺,我会认真教学public void teach() {System.out.println(super.getName() + "我承若我会认真教学");}@Overridepublic String play() {return "足球";}
}

http://www.lryc.cn/news/45030.html

相关文章:

  • 重构类关系-Extract Interface提炼接口八
  • vivo手机各系列简介和拆解
  • Redis:redis通用命令;redis常见数据结构;redis客户端;redis的序列化
  • Java新特性
  • Java_Spring:8. Spring 中 AOP 的细节
  • uni-app--》uni-app的生命周期讲解
  • fastp软件介绍
  • C++继承相关总结
  • 【从零开始学习 UVM】8.2、Reporting Infrastructure —— uvm_printer 详解
  • Mybatis、TKMybatis对比
  • 37了解高可用技术方案,如冗余、容灾
  • jdb调试问题集锦
  • 要和文心一言来一把你画我猜吗?
  • delete[] p->elems和free(p->elems)有什么区别?
  • CAS问题
  • 网络编程socket(下)
  • 华为OD机试题【打折买水果】用 C++ 编码,速通
  • JSON 数据类型
  • Python函数简介
  • 一文读懂 mysql 为什么要两阶段提交以及两阶段提交原理
  • 启动Hadoop报错【Error: JAVA_HOME is not set and could not be found.】
  • 《MySQL系列-InnoDB引擎35》索引与算法-B+树索引的使用
  • 【EHub_tx1_tx2_E100】不止科技NVISTAR ROC 300激光雷达Ubuntu18.04+ROS1ROS2 评测
  • C语言函数大全--d开头的函数
  • 基于springboot实现福聚苑社区团购演示【项目源码】
  • 动静态库的制作
  • QMS-云质-质量软件-客诉,为什么应该用两段式来处理
  • JS:关于邮箱的正则表达式及规则
  • 两句话,ChatGPT帮我写一个打飞机的游戏
  • 计算机图形学14:三维图形的投影变换