有一道 java面向对象编程题 求大家帮我写一下 面向对象基础 看到迷茫

Python014

有一道 java面向对象编程题 求大家帮我写一下 面向对象基础 看到迷茫,第1张

package employee

public class Employee {

//员工私有属性

private String name //员工姓名

private int age //员工年龄

private String position //员工职位

private int salary //工资

/**

* 给所有的属性指定初始值

* @param name

* @param age

* @param position

* @param salary

*/

public Employee(String name,int age,String position,int salary){

this.name = name

this.age =age

this.position = position

this.salary = salary

}

/**

* 给name属性赋值

* @param name

*/

public void setName(String name){

this.name = name

}

public String getName() {

return name

}

/**

* 给age属性赋值

* @param age

*/

public void setAge(int age){

if(age<18){

this.age=18

System.out.println("当年龄无效时,默认为18")

}else{

this.age =age

}

}

public int getAge() {

return age

}

/**

* 给position属性赋值

* @param position

*/

public void setPosition(String position){

if(position.equals("售后服务") || position.equals("销售员") ){

this.position = position

}else{

this.position = "售后服务"

System.out.println("输入不符合要求,默认为售后服务")

}

}

public String getPosition() {

return position

}

/**

* 给员工工资赋值

* @param salary

*/

public void setSalary(){

if(age>=18 &&age<=20){

this.salary = 1000

}else if(age>=21 &&age<=25){

this.salary = 1500

}else if(age>=26 &&age<=30){

this.salary = 2000

}else if(age>=31 &&age<=40){

this.salary = 3000

}else if(age>=41 &&age<=50){

this.salary = 3500

}else if(age>=51){

this.salary = 4000

}else{

System.out.println("没有设置年龄或者年龄无效")

}

}

public int getSalary() {

return salary

}

}

测试类

package employee

import java.util.Scanner

public class TestEmployee {

public static void main(String[] args){

Employee emp1 = new Employee(null, 0, null, 0)

Scanner sc = new Scanner(System.in)

System.out.println("请输入第一个员工姓名")

//获取输入的名字

String name1 = sc.next()

emp1.setName(name1)

System.out.println("请输入第一个员工年龄")

//获取输入的年龄

int age1 = sc.nextInt()

emp1.setAge(age1)

System.out.println("请输入第一个员工职位")

//获取输入的职位

String position1 = sc.next()

emp1.setPosition(position1)

emp1.setSalary()

System.out.println("---------------------------------")

System.out.println("员工1姓名为:"+emp1.getName())

System.out.println("年龄:"+emp1.getAge())

System.out.println("工作为:"+emp1.getPosition())

System.out.println("工资为:"+emp1.getSalary())

}

}

第一次回答问题,玩玩而已但是还是希望采纳

这个事加载顺序的问题

在解释之前,你得先明确这么几条概念

  1.构造子类时会先构造父类;而构造父类时,其所用的静态成员和非静态属性是父类的,但非静态方法却是子类的

2.加载父类时如果遇到重写的成员,则把重写的类型赋值给当前类型

3.加载非静态成员先递归地加载父类的非静态成员在轮到子类

我解释下你这个例子:

程序入口地址main调用构造器,构造Boo

这时候要加载Boo的构造器,构造子类时会先构造父类(如果子类没显示构造器)。

Aoo调用无参的时候发现里面有个方法,在子类被重写了,调用子类方法。

子类方法,发现用到了父类的属性(子类没重写),这个时候由于还在加载父类,所以子类属性值还在初始化状态。集b=0

所以 a=2,b=0

这有点绕,如果还不懂,建议你去查查类加载的顺序。