3

この実装を変更するにはどうすればよいですか:

public interface Animal()
{
   public void eat();
}

public class Dog implements Animal
{
   public void eat()
   {}
}

public void main()
{
   // Animal can be instantiated like this:
  Animal dog = new Dog();

  // But I dont want the user to create an instance like this, how can I prevent this declaration?
  Dog anotherDog = new Dog();
}
4

2 に答える 2

7

ファクトリ メソッドを作成し、コンストラクターを保護します。

public class Dog implements Animal {
   protected Dog () {
   }

   public static Animal createAsAnimal () {
      new Dog ();
   }
}
于 2013-02-01T00:12:33.217 に答える
1

ファクトリメソッドを作成すると、次のように実行できます。

public interface Animal {
    public void eat();

    public class Factory {
    public static Animal getAnimal() {
        return new Dog();
    }
        private static class Dog implements Animal {
            public void eat() {
                System.out.println("eats");
            }
        }
    }
}

Dogクラスはユーザーには表示されません。走る :

Animal dog= Animal.Factory.getAnimal();
dog.eat();//eats
于 2013-02-01T07:21:15.997 に答える