面向对象练习题(6)

目录

第一题

第二题

第三题


第一题

思路分析:

1.这题充分的使用到了我们继承的知识,首先我们知道,我们要创建一父类也是员工类,在类中会有一些属性,和构造器,方法等

2.因为经理类会有一个特有的属性,因此我们要对齐进行单独赋值,这样大大的增加了灵活性,因此在经理类中,在继承完父类后,还要单独为经理的特有属性,提供get和set方法,方便后面使用,然后重写父类的打印工资的方法即可

3,因为员工类,没有特有的属性也没有特有的方法,因此只需要指定父类的构造器,和重写一下父类的方法即可

homework04类

package idea.homework.homework04;

public class homework04 {
    public static void main(String[] args) {
        /*
        4.通过继承实现员工工资核算打印功能
        父类:员工类
        子类:部门经理类、普通员工类
        (1)部门经理工资=1000+单日工资*天数*等级(1.2)。
        (2)普通员工工资=单日工资*天数*等级(1.0);
        (3)员工属性:姓名,单日工资,工作天数
        (4)员工方法(打印工资)
        (5)普遍员工及部门经理都是员工子类,需要重写打印工资方法。
        (5)定义并初始化普通员工对象,调用打印工资方法输入工资,定义并初始化部门经理对象,调用打印工资方法输入工资
         */

        work jack = new work("jack", 123, 10, 1.0);
        jack.print();

        Manager tom = new Manager("tom", 100, 10, 1.0);
        //注意这里要为经理额外赋值奖金,因为我们在经理类中,没有为其赋值,所以我们这里要单独设置一下,不然经理的奖金就是0了
        tom.setBonus(1000);
        tom.print();
    }
}

Employee类

package idea.homework.homework04;

/**
 * 员工类——父类
 */
public class Employee {
    //定义了四个私有的属性
    private String name;//名字
    private double salary;//每日工资
    private int date;//工作天数
    private double gender;//等级

    public Employee(String name, double salary, int date, double gender) {
        this.name = name;
        this.salary = salary;
        this.date = date;
        this.gender = gender;
    }

    public void print() {
        System.out.println("name=" + name + "\tsalary=" + salary * date * gender + "\tdate=" + date + "\tgender=" + gender);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public int getDate() {
        return date;
    }

    public void setDate(int date) {
        this.date = date;
    }

    public double getGender() {
        return gender;
    }

    public void setGender(double gender) {
        this.gender = gender;
    }
}

Manage类

package idea.homework.homework04;

/**
 * 经理类
 */
public class Manager extends Employee {
    //这是经理类特有的属性
    private double bonus;

    //重写父类的方法,因为该类有特殊的属性,因此我们不能够,单单重写父类的方法
    @Override
    public void print() {
        System.out.println("经理=" + getName() + "\t工资=" + (getSalary() * getDate() * getGender() + bonus) + "\t工作天数=" + getDate() + "\t级别=" + getGender());
    }

    //构造器,对于经理类的特殊属性,我们不使用构造器赋值,而是使用set方法去赋值
    public Manager(String name, double salary, int date, double gender) {
        super(name, salary, date, gender);
    }

    public double getBonus() {
        return bonus;
    }

    public void setBonus(double bonus) {
        this.bonus = bonus;
    }
}

work类

package idea.homework.homework04;

/**
 * 普通员工类——子类
 */
public class work extends Employee {
    //在继承父类之后要,指定使用父类的那个构造器,因为父类的无参构造器已经被覆盖,所以我们需要只指定具体的构造器
    public work(String name, double salary, int date, double gender) {
        super(name, salary, date, gender);
    }

    //因为普通员工类没有特殊的方法和属性,所以,直接调用父类的方法即可
    @Override
    public void print() {
        System.out.println("这是普通员工的信息");
        super.print();
    }
}

第二题

思路分析:

本题还是使用充分的使用到了继承的思想,

1.首先我们要先定义一个父类,并且在父类中,提供相应的属性和方法

2.在对有类中,有单独的特殊属性的时候,我们提供get和set方法进行单独的赋值,这样大大的增加了灵活性。

3.在进行测试的时候,一定不要忘记了,为我们特有的属性进行赋值,否则就按照默认值来给了

homework06类

package idea.homework.homework05;


public class homework05 {
    public static void main(String[] args) {
        /*
        5.设计父类一员工类。子类:工人类worker,农民类peasant,教师类teacher,科学家类,服务生类。
        (1)其中工人,农民,服务生只有基本工资
        (2)教师除基本工资外,还有课酬(元/天)
        (3)科学家除基本工资外,还有年终奖
        (4)编写一个测试类,将各种类型的员工的全年工资打印出来
         */


        //创建一个工人类
        worker worker = new worker("jack", 10000, 15);
        //调用工人类的print方法打印工资
        worker.print();
        //创建一个农名类
        peasant peasant = new peasant("tom", 290, 12);
        peasant.print();
        //创建一个教师类
        Teacher smith = new Teacher("smith", 2000, 12);
        //因为在Teacher类中设置了两个特殊的属性,因此在这里我们要对齐进行单独的赋值,然后才去调用方法打印出工资
        smith.setClasstime(360);//因为设置成私有的属性通过set方法设置一节课的费用
        smith.setRemuneration(1000);//因为设置成私有的属性通过set方法设置一共上了几节课
        smith.print();

        //创建一个科学家类
        scientist a = new scientist("小名", 20000, 12);
        a.setBouns(200000);//因为设置成私有的属性通过set方法设置年终奖
        a.print();
        //创建一个服务生类
        buttons abc = new buttons("abc", 20, 12);
        abc.print();
    }
}

Employee类

package idea.homework.homework05;

public class Employee {
    //员工类是父类
    //公共的属性有名字 基本工资  天数
    private String name;//表示名字
    private double salary;//一个月工资简称基本工资
    private int date;//工作的月份

    public Employee(String name, double salary, int date) {
        this.name = name;
        this.salary = salary;
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public int getDate() {
        return date;
    }

    public void setDate(int date) {
        this.date = date;
    }


    public void print() {
        //打印一个人的名字和工资,,工资等于  月工资*工作的月份
        System.out.println("名字=" + name + "\t工资=" + salary * date + "\t月份" + date);
    }
}

worker类

package idea.homework.homework05;

import idea.homework.homework05.Employee;

public class worker extends Employee {
    //因为该类没有一些特有的属性,所以只需要指定指定一些父类的构造器即可
    public worker(String name, double salary, int date) {
        super(name, salary, date);
    }

    @Override
    public void print() {
        System.out.println("工人的名字");
        super.print();
    }
}

peasant类

package idea.homework.homework05;

public class peasant extends Employee {//农民类

    //因为工人,农民,服务生只有基本工资所以不需要什么其他的东西只需要一个构造器调用父类的方法即可
    public peasant(String name, double salary, int date) {
        super(name, salary, date);
    }

    @Override
    public void print() {//重写父类的方法
        System.out.print("农名的名字是");
        super.print();
    }
}

teacher类

package idea.homework.homework05;

import idea.homework.homework05.Employee;

public class Teacher extends Employee {
    //这是Teacher类特有的属性
    private double remuneration;//表示课酬 一节课要多少钱
    private double classtime;//表示上了几节课

    //在构造器初始化的时候不要把新增加的属性放到构造器中这是Teacher类独有的属性
    //可以通过set方法设置,更加灵活
    public Teacher(String name, double salary, int date) {
        super(name, salary, date);

    }

    public double getRemuneration() {
        return remuneration;
    }

    public void setRemuneration(double remuneration) {
        this.remuneration = remuneration;
    }

    public double getClasstime() {
        return classtime;
    }

    public void setClasstime(double classtime) {
        this.classtime = classtime;
    }

    public void print() {
        //因为老师的增加了课时费所以老师的工资是 基本工资*月份+一节课的费用*一共上了几节课
        System.out.println("老师的名字是" + getName() + "\t工资=" + (getSalary() * 12 + remuneration * classtime) + "\t月份" + getDate());
    }

}

buttons类

package idea.homework.homework05;

public class buttons extends Employee {//服务生类

    //因为工人,农民,服务生只有基本工资所以不需要什么其他的东西只需要一个构造器调用父类的方法即可
    public buttons(String name, double salary, int date) {
        super(name, salary, date);
    }

    @Override
    public void print() {//重写父类的方法
        System.out.print("服务生的名字是");
        super.print();
    }
}

scientist类

package idea.homework.homework05;

public class scientist extends Employee {//科学家类
    //这是该类特有的属性
    private double bouns;//年终奖

    public scientist(String name, double salary, int date) {
        super(name, salary, date);
    }


    public void print() {
        //基本工资*月份+年终奖
        System.out.println("科学家的名字是" + getName() + "\t工资=" + (getSalary() * 12 + bouns) + "\t月份" + getDate());
    }

    public double getBouns() {
        return bouns;
    }

    public void setBouns(double bouns) {
        this.bouns = bouns;
    }
}

第三题

在Father类中

思路分析:

super可以访问哪些成员(属性和方法)

1.因为super关键字是从父类开始查找,不会从本类开始查找,所以本类中的id属性super是访问不到的,因为Father类继承了Grand类,因此就可以访问父类中的所有属性和方法,但是也要遵守访问修饰符的权限,我们可以看到吗,父类中的name属性是可以访问的 ,但是age属性不可以访问,因为他是私有的,g1方法也可以访问

this可以访问哪些成员

1.因为this是从本类中开始查找,因此本类中的id属性,score属性,f1方法都可以访问,因为继承了grand类,所有name属性和g1方法都可以访问,age属性不可以访问是因为,this也要遵守访问修饰符的权限

在Son类中

 super可以访问那些成员(属性和方法)

// super.id super.f1() super.g1() super.name 访问完当前父类还要访问Grand因为继承

 this可以访问那些成员

// this.name this.g1() this.show() this.id this.f1() 注意不可以掉用超类的name属性还有g1方法因为本类已经有了相当于重写了超类所以不可以调用

package idea.homework.homework06;


public class homework06 {
    public static void main(String[] args) {

    }
}

class Grand {
    String name = "AA";
    private int age = 100;

    public void g1() {
    }
}

class Father extends Grand {
    String id = "001";
    private double score;

    public void f1() {
    }
//    super可以访问那些成员(属性和方法)
//        super.name  super.g1()
//    this可以访问那些成员
//    this.id  this.score   this.f1()  this.g1   this.name
}

class Son extends Father {
    String name = "BB";

    public void g1() {
    }



    private void show() {
    }

//    super可以访问那些成员(属性和方法)
//    super.id   super.f1()  super.g1()  super.name   访问完当前父类还要访问超类因为继承
//    this可以访问那些成员
//            this.name   this.g1()  this.show()   this.id   this.f1()   注意不可以掉用超类的name属性还有g1方法因为本类已经有了相当于重写了超类所以不可以调用
}

猜你喜欢

转载自blog.csdn.net/weixin_53616401/article/details/129772486