"Human" interfaces with two implementation classes The Helloworld class executes all of the methods. Human is the interface, and Nate &amp; Ryan are two classes that implement the Human interface. Are there any deficiencies or faults that my code contains that could help me in the long run?

public class Helloworld{

    public static void main(String[] args) {

        Human ryan = new Ryan();
        ryan.setHeight(12);
        System.out.println("Ryan's height is " + ryan.getHeight());

        Human nate = new Nate();
        nate.setHeight(32);
        System.out.println("Nate's height is " + nate.getHeight());

        nate.hit(ryan);

        /*
         * OUTPUT --------------------------------------
         * 
         * Ryan's height is 12
         * Nate's height is 32
         * Nate has hit Ryan
         * 
         */

    }

}




interface Human{

    public void sleep();
    public void eat();
    public void wakeUp();
    public void walk();
    public void hit(Human name);
    public void setHeight(int height);
    public int getHeight();
    public String getName();

}




class Nate implements Human{

    int height = 0;
    final String name = "Nate";

    public String getName() {
        return this.name;
    }

    public void setHeight(int height) {
        if(height &gt; 0) {
            this.height = height;
        }else {
            System.out.println("You can't set Nate's height to less than 0.");
        }
    }
    public int getHeight() {
        return this.height;
    }
    public void sleep() {
        System.out.println("Nate has fallen asleep");
    }
    public void eat() {
        System.out.println("Nate has eaten");
    }
    public void wakeUp() {
        System.out.println("Nate has woken up");
    }
    public void walk() {
        System.out.println("Nate is walking");
    }
    public void hit(Human name) {
        System.out.println("Nate has hit " + name.getName());
    }

}




class Ryan implements Human{

    int height = 0;
    final String name = "Ryan";

    public String getName() {
        return this.name;
    }

    public void setHeight(int height) {
        if(height &gt; 0) {
            this.height = height;
        }else {
            System.out.println("You can't set Ryan's height to less than 0.");
        }
    }
    public int getHeight() {
        return this.height;
    }
    public void sleep() {
        System.out.println("Ryan has fallen asleep");
    }
    public void eat() {
        System.out.println("Ryan has eaten");
    }
    public void wakeUp() {
        System.out.println("Ryan has woken up");
    }
    public void walk() {
        System.out.println("Ryan is walking");
    }
    public void hit(Human name) {
        System.out.println("Ryan has hit " + name.getName());
    }

}
A class is a blueprint or template or set of instructions to build a specific type of object. Every object is built from a class.
  An instance is a specific object built from a specific class. It is assigned to a reference variable that is used to access all of the instance's properties and methods.
  


Ryan and nate should both be an instance. They have the same properties. From the 2 classes you can extract one template and make it a Human class.

What you are doing now is hard coding their properties into the methods. Try to make it more dynamic by creating one class.


public void eat() {
    System.out.println("Nate has eaten");
}



Can then be tranformed into:

public void eat() {
    System.out.println(this.name + " has eaten");
}