import java.util.Scanner; abstract class Employee{ public int monkey; public abstract int getMonkey(); } class Manager extends Employee{ public Manager(int monkey) { this.monkey=monkey; } public int getMonkey() { return this.monkey; } } class Salesman extends Employee{ int T; public Salesman(int monkey,int t) { this.monkey=monkey; T=t; } @Override public int getMonkey() { return this.monkey+T; } } class Worker extends Employee{ int n; public Worker(int monkey,int n){ this.monkey=monkey; this.n=n; } @Override public int getMonkey() { return n*monkey; } } class Main{ public static void main(String[] args) { Scanner s=new Scanner(System.in); Employee e1=new Manager(s.nextInt()); Employee e2=new Salesman(s.nextInt(),s.nextInt()); Employee e3=new Worker(s.nextInt(),s.nextInt()); System.out.println(e1.getMonkey()); System.out.println(e2.getMonkey()); System.out.println(e3.getMonkey()); } }用中文分析代码
理解问题import java.util.Scanner; abstract class Employee{ public int monkey; public abstract int getMonkey(); } class Manager extends Employee{ public Manager(int monkey) { this.monkey=monkey; } public int getMonkey() { return this.monkey; } } class Salesman extends Employee{ int T; public Salesman(int monkey,int t) { this.monkey=monkey; T=t; } @Override public int getMonkey() { return this.monkey+T; } } class Worker extends Employee{ int n; public Worker(int monkey,int n){ this.monkey=monkey; this.n=n; } @Override public int getMonkey() { return n*monkey; } } class Main{ public static void main(String[] args) { Scanner s=new Scanner(System.in); Employee e1=new Manager(s.nextInt()); Employee e2=new Salesman(s.nextInt(),s.nextInt()); Employee e3=new Worker(s.nextInt(),s.nextInt()); System.out.println(e1.getMonkey()); System.out.println(e2.getMonkey()); System.out.println(e3.getMonkey()); } }用中文分析代码
已完成理解「import java.util.Scanner; abstract class Employee{ public int monkey; public abstract int getMonkey(); } class Manager extends Employee{ public Manager(int monkey) { this.monkey=monkey; } public int getMonkey() { return this.monkey; } } class Salesman extends Employee{ int T; public Salesman(int monkey,int t) { this.monkey=monkey; T=t; } @Override public int getMonkey() { return this.monkey+T; } } class Worker extends Employee{ int n; public Worker(int monkey,int n){ this.monkey=monkey; this.n=n; } @Override public int getMonkey() { return n*monkey; } } class Main{ public static void main(String[] args) { Scanner s=new Scanner(System.in); Employee e1=new Manager(s.nextInt()); Employee e2=new Salesman(s.nextInt(),s.nextInt()); Employee e3=new Worker(s.nextInt(),s.nextInt()); System.out.println(e1.getMonkey()); System.out.println(e2.getMonkey()); System.out.println(e3.getMonkey()); } }用中文分析代码」
展开阅读网页
这段Java代码定义了一个抽象类Employee
和三个继承自Employee
的子类Manager
、Salesman
和Worker
。代码的主要目的是通过不同的子类对象来计算并输出各自的monkey
值。以下是对代码的详细分析:
-
抽象类
Employee
: -
类
Manager
:- 继承自
Employee
类。 - 有一个构造器,接收一个整数参数并赋值给
monkey
。 - 实现了
getMonkey()
方法,直接返回monkey
的值。
- 继承自
-
类
Salesman
:- 继承自
Employee
类。 - 有一个构造器,接收两个整数参数:第一个赋值给
monkey
,第二个赋值给成员变量T
。 - 实现了
getMonkey()
方法,返回monkey
和T
的和。
- 继承自
-
类
Worker
:- 继承自
Employee
类。 - 有一个构造器,接收两个整数参数:第一个赋值给
monkey
,第二个赋值给成员变量n
。 - 实现了
getMonkey()
方法,返回n
与monkey
的乘积。
- 继承自
-
主类
Main
:- 在
main
方法中,使用Scanner
类读取用户输入的整数。 - 分别创建了
Manager
、Salesman
和Worker
的实例,并存储在Employee
类型的引用e1
、e2
和e3
中。 - 调用每个对象的
getMonkey()
方法,并打印结果。
- 在
代码中存在一些问题和注意事项:
- 抽象类
Employee
中的成员变量monkey
应该是私有的,并通过构造器或公共方法进行访问,以符合封装性原则。 Employee
类中的抽象方法getMonkey()
在子类中必须被重写(使用@Override
注解)7。- 在
Main
类的main
方法中,应该对用户输入进行异常处理,以避免非数字输入导致的程序崩溃。 Employee
类的对象不能直接创建,因为它是一个抽象类,代码中通过创建其子类的对象来实现多态性124。
整体而言,这段代码展示了如何在Java中使用抽象类和继承,以及如何通过多态性让不同类型的对象以统一的方式进行交互。