I think this might be a very basic Java question, and I apologize since I’m a beginner, but I want to understand what am I getting wrong here: I’m supposed to create a package, and inside it, I must create the following:
- an interface with a method (the question says nothing besides it, so I created it empty)
- 2 classes, A and B, which must implement the method created in said interface and print their own names
- A third class, C, which must override B’s implementation
- And an Execute method inside the main class. This method must receive a letter as a parameter, no matter if it’s capital case or not, and execute the method of the corresponding class (i.e. if this method receives as a parameter the letter A, it must execute the method belonging to class A)
So far I came up this this, but the code receives the input, and doesn’t do anything:
Interface
public interface Test { public static void testInterface() { } }
Classes
public class Teste { public static void main(String[] args) { class A implements Test { public void testInterface() { System.out.println("A"); } } class B implements Test { public void testInterface() { System.out.println("B"); } } class C extends B { public void testInterface() { System.out.println("C"); } } Scanner inputLetter = new Scanner(System.in); // Create a Scanner object System.out.println("Enter a letter from A to C: "); String resLetter = inputLetter.nextLine(); // Read user input if (resLetter == "A") { A a = new A(); a.testInterface(); } if (resLetra == "B") { B b = new B(); b.testInterface(); } if (resLetra == "C") { C c = new C(); c.testInterface(); } } }
To be quite honest, I may be messing up with the code’s structure too, since I’m not too sure of how should I organize it – I didn’t create the Execute method because I had a lot of trouble creating classes without the main method, and couldn’t put a method inside another, and I want to make it as simple as possible to make it work before I can try bolder things, so any help will be of great value!
Advertisement
Answer
You’re on a good way. I’ll just post some information to get you over your current roadblock.
public interface MyTestInterface { void testInterface(); }
Interfaces will just “announce” a method. This just tells you (and the compiler) that any Class that implements MyTestInterface
has to supply a method called testInterface()
. Don’t make them static, as this would prevent any class implementing the interface from overriding the method.
Put your classes in their own .java
file. While you can define a class within a class (so called Inner Class), it has some implications.
A.java
public class A implements MyTestInterface { @Override public void testInterface() { // Objects of Class A do something here } }
MyMain.java
public class MyMain { public static void main(String[] args) { MyTestInterface implementedByA = new A(); implementedByA.testInterface(); } }
Since it implements MyTestInterface
, an Object of Class A is both an instance of A
and an instance of MyTestInterface
. This allows you, to declare a variable of type MyTestInterface
and assign it an implementation of one implementing class.
And as @Amongalen mentioned: How do I compare strings in Java?