Java 我如何表达对象,它应该是两个不同的类在同一时间
今天,我在OOP中进行了测试,我被分配了以下任务来编写代码: 假设您有两个类:Employee(代表员工)和Ninja(代表忍者)。雇员既有状态又有行为;忍者只有行为。您需要代表一名同时也是忍者的员工(现实世界中的一个常见问题)。通过只创建一个接口和一个类(NinjaEmployee),展示如何做到这一点,而不必从任何一个原始类复制方法实现代码。在main方法中测试代码 我不是很了解这个问题,但这是我带来的解决方案(我知道这不是问的问题): 除了main之外,我创建了4个类。由于员工有状态和行为,我提出了以下代码:Java 我如何表达对象,它应该是两个不同的类在同一时间,java,oop,interface,polymorphism,Java,Oop,Interface,Polymorphism,今天,我在OOP中进行了测试,我被分配了以下任务来编写代码: 假设您有两个类:Employee(代表员工)和Ninja(代表忍者)。雇员既有状态又有行为;忍者只有行为。您需要代表一名同时也是忍者的员工(现实世界中的一个常见问题)。通过只创建一个接口和一个类(NinjaEmployee),展示如何做到这一点,而不必从任何一个原始类复制方法实现代码。在main方法中测试代码 我不是很了解这个问题,但这是我带来的解决方案(我知道这不是问的问题): 除了main之外,我创建了4个类。由于员工有状态和行为
public class Employee {
private int ID;
private String Name;
private double salary;
public Employee(int ID, String Name, double salary) {
this.ID = ID;
this.Name = Name;
this.salary = salary;
}
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
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 void startWorking() {
System.out.println("Started Working");
}
}
忍者职业只有以下行为:
public class Ninja {
public Ninja(){}
public void moveNinja(){
System.out.println("Ninja moved");
}
}
雇员类别:
public class NinjaEmployee extends Employee implements MyInterface {
public NinjaEmployee(int ID, String Name, double salary) {
super(ID, Name, salary);
}
public void moveNinja() {
System.out.println("Ninja Moved");
}
}
在我的代码中没有意义的接口:
public interface MyInterface {
public void moveNinja();
public void startWorking();
}
主要类别:
public static void main(String[] args){
MyInterface em = new NinjaEmployee(123,"Sandro",1000000);
em.moveNinja();
em.startWorking();
}
我的问题如下:
1) 具体/技术上,测试中询问了什么
2) 对于给定的问题,什么是正确的方法/代码?您不能创建2个类的1个对象 您可以扩展该类,以便在实例化子类时调用父类构造函数 然后可以在该构造函数中创建另一个类的对象 在数组中添加员工,并添加选项以在忍者中添加员工?1.是还是2.不是?
如果是,添加到忍者。然后在main方法中,使用for循环逐个打印忍者的名称我不知道正确答案(任务的定义有点不严格,有一些不清楚的时刻),但我会这样做:
public interface IAmNinja {
public void moveNinja();
}
public interface IAmEmployer {
public void startWorking();
}
public class NinjaEmployee implements IAmNinja, IAmEmployer {
private Ninja _ninja;
private Employer _employer;
public NinjaEmployee(int ID, String Name, double salary) {
_employer = new Employer(ID, Name, salary);
_ninja = new Ninja();
}
public void moveNinja() {
_ninja.moveNinja();
}
public void startWorking() {
_employer.startWorking();
}
}
问得好。
问题的关键是:
Employee
类,并像其他简单类一样实现它。它有一些实现的属性和类
其次:我们有一个名为Ninja\u Interface
的接口,其中包含一些关于忍者的方法声明。(moveNinja1
和moveNinja2
)
第三个:Ninja
类,该类实现了(或实现了)Nijna\u接口
,并且在Ninja\u接口
中实现了一些方法声明
第四类:NinjaEmployee类。它继承自员工
。因此,它拥有所有员工的属性和方法。它还实现了忍者界面
。因此,它应该实现所有的Ninja_接口
方法声明。另一方面,NinjaEmployee
有一个Ninja
的实例(注意,Ninja
类实现了所有Ninja\u接口
方法)So,在
Ninja\u Employee
类中,在Ninja\u接口
方法的实现中,可以使用Ninja
实例方法调用
例如,NinjaEmployee
的某些部分如下代码所示:
private Ninja ninja=new Ninja();
public void moveNinja1()
{
ninja.moveNinja1();
}
public void moveNinja2()
{
ninja.moveNinja2();
}
主要问题是:为什么忍者类应该只有一些方法
这是因为Ninja
类只是Ninja\u接口
方法的实现,不需要属性。因此,忍者类的实例是相同的。因此,我们可以将NinjaEmployee
中的Ninja
属性声明为静态属性
最后:我们也可以将忍者的一些属性添加到NinjaEmployee
类中。@OleV.V。你认为这是解决给定问题的正确方法吗?我觉得缺少了一些东西,因为我缺乏一些概念方面的理论知识“…而不必从任何一个原始类复制方法实现代码”。您已将moveNinja
方法从Ninja
复制到NinjaEmployee
,因此我认为您没有完全满足要求。我会认为作文(如果你们知道它的意思的话)。我知道我做不到,若你们仔细阅读这篇文章,我会给出最初的任务,我想知道对于给定的问题,正确的方法会是什么?只有一个界面??很难看:)也许你们更注重结果,但我更喜欢更好的设计。是的,我们可以使用继承作为一种讨厌的手段来拉动实现,我们甚至可以最终得到0-1000个接口,但是。。。你想做编程还是黑客?我觉得你帮的太多了。OP将从自己解决作业中学到更多。你的方法很好。