当前位置: 代码迷 >> 综合 >> Day12 JavaObject02
  详细解决方案

Day12 JavaObject02

热度:29   发布时间:2023-12-24 07:46:14.0

1… 将人,学生和老师(老师多了教工编号和讲课的行为)案例用继承实现,并添加军人类,军人的特殊属性假设有部队编号,军人特有的行为假设有训练。

package com.cskaoyan.extend.homework.work01;public class Work01 {
    public static void main(String[] args) {
    //创建学生对象Student student = new Student("Tom","man",24,25);student.print();student.eat();//调用学生类的父类(人类)的方法student.study();//调用学生类特有的方法//创建教师对象Teacher teacher = new Teacher("Helen","woman",35,10);teacher.print();teacher.sleep();//调用教师类的父类(人类)的方法teacher.teach();//调用教师类特有的方法//创建军人对象Soldier soldier = new Soldier("John","man",28,15);soldier.print();soldier.eat();//调用军人类的父类(人类)的方法soldier.training();//调用军人类的父类(人类)的方法}
}
//人类
class Human{
    String name;//姓名String sex;//性别int age;//年龄Human(String name,String sex,int age){
    //带参构造函数this.name = name;this.sex = sex;this.age = age;}public void eat(){
    //吃饭行为System.out.println("eating...");}public void sleep(){
    //睡觉行为System.out.println("sleeping...");}public void print(){
    //输出人的信息System.out.println("human information---------name:" + name + ",sex:" + sex + ",age:" + age);}
}
//学生类
class Student extends Human{
    int sno;//学号Student(String name,String sex,int age,int sno){
    //带参构造函数super(name,sex,age);this.sno = sno;}public void study(){
    //学习行为System.out.println("studying...");}public void print(){
    //输出学生的信息System.out.println("student information---------name:" + name + ",sex:" + sex + ",age:" + age + ",sno:" + sno);}
}
//教师类
class Teacher extends Human{
    int tno;//教工编号Teacher(String name,String sex,int age,int tno){
    //带参构造函数super(name,sex,age);this.tno = tno;}public void teach(){
    //讲课行为System.out.println("teaching...");}public void print(){
    //输出教师的信息System.out.println("teacher information---------name:" + name + ",sex:" + sex + ",age:" + age + ",tno:" + tno);}
}
//军人类
class Soldier extends Human{
    int ssno;//部队编号Soldier(String name,String sex,int age,int ssno){
    //带参构造函数super(name,sex,age);this.ssno = ssno;}public void training(){
    //训练行为System.out.println("training...");}public void print(){
    //输出军人的信息System.out.println("soldier information---------name:" + name + ",sex:" + sex + ",age:" + age + ",ssno:" + ssno);}
}

测试
在这里插入图片描述

  1. a. 声明一个Person类,里面定义了三个属性,name、gender、age(姓名、性别、年龄) 通过构造方法进行赋值。有一个display方法,可以展示对应的姓名性别年龄信息 b.
    声明一个Student类,继承自Person类,增加一个独特的属性id(学号)
    通过构造方法进行赋值,同时有一个方法可以展示姓名性别年龄学号信息 c.
    声明一个Teacher类,继承自Person类,增加course属性(教学课程)
    通过构造方法进行赋值,有一个方法,可以显示姓名性别年龄教学课程信息 d.编写一个测试类,验证你的代码
package com.cskaoyan.extend.homework;public class Work02 {
    public static void main(String[] args) {
    //创建学生对象Student student = new Student("Tom","man",24,25);student.display();//输出学生对象的信息//创建教师对象Teacher teacher = new Teacher("Helen","woman",35,10);teacher.display();//输出教师对象的信息}
}
//人类
class Person{
    String name;//姓名String gender;//性别int age;//年龄Person(String name,String gender,int age){
    //带参构造函数this.name = name;this.gender = gender;this.age = age;}public void display(){
    //输出人的信息System.out.println("Person Information: " + "name = " + name + ",gender = " + gender + ",age = " + age);}
}
//学生类
class Student extends Person{
    int id;//学号Student(String name,String gender,int age,int id){
    //带参构造函数super(name,gender,age);this.id = id;}public void display(){
    //输出学生的信息System.out.println("Student Information: " + "name = " + name + ",gender = " + gender + ",age = " + age + ",id = " + id);}
}
//教师类
class Teacher extends Person{
    int course;//课程号Teacher(String name,String gender,int age,int course){
    //带参构造函数super(name,gender,age);this.course = course;}public void display(){
    //输出教师信息System.out.println("Teacher Information: " + "name = " + name + ",gender = " + gender + ",age = " + age + ",course = " + course);}
}

测试
在这里插入图片描述

附加题 分别写出如下两幅图片中所示代码的输出:

1.
在这里插入图片描述
分析:

因为Sub类的父类是Base类,所以创建Sub对象触发jvm加载Base类。
首次加载Base类的时候,执行static代码块,输出“base static”。
再加载子类Sub类,
首次加载Sub类时,执行static代码块,输出“sub static”。
到此,类加载结束。
创建Sub类的对象要进行初始化。
初始化父类对象。
首先要执行Base的构造代码块,输出“base构造代码块”。
然后执行Base的构造函数,输出“base构造函数”。
再初始化子类对象。
首先要执行Sub的构造代码块,输出“sub构造代码块”。
然后执行Sub的构造函数,输出“sub构造函数”。
综上,第一幅图中代码的输出为:
base static
sub static
base构造代码块
base构造函数
sub构造代码块
sub构造函数

2.
在这里插入图片描述
分析:
在这里插入图片描述

执行测试类Obj3的主函数,首先要创建Obj3类的对象,
因为Obj3类的父类是Obj1,所以要先加载Obj1类,再加载Obj3类。
然后进行Obj1对象的初始化,
由于Obj1类的构造函数之前有成员变量的赋值语句:Obj2 obj2 = new Obj2();语句,所以触发jvm加载Obj2类。
再进行Obj2对象的初始化,输出“Obj2”。
再调用Obj1的构造函数,输出“Obj1”。
到此,父类对象初始化完毕。
父类Obj1的对象初始化后再初始化子类Obj3的对象,
由于Obj3类的构造函数之前有成员变量的赋值语句:Obj2 obj2 = new Obj2();
所以再次进行Obj2对象的初始化,输出“Obj2”。
最后执行Obj3的构造函数,输出“obj3”。
综上,第一幅图中代码的输出为:
Obj2
Obj1
Obj2
Obj3