简体   繁体   中英

How can I make classes implement an interface and print their methods based on a given parameter in Java?

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 (ie 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!

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?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM