欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Day12 JavaObject02

程序员文章站 2024-03-14 08:51:58
...

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);
    }
}

测试
Day12 JavaObject02

  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);
    }
}

测试
Day12 JavaObject02

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

1.
Day12 JavaObject02
分析:

因为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.
Day12 JavaObject02
分析:
Day12 JavaObject02

执行测试类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

相关标签: 王道Java20th