Утиная типизация и концепция (java) интерфейса

Я только что прочитала статью в Википедии о утином наборе , и мне кажется, что я упускаю важный момент в концепции интерфейса. используется в Java:

"When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck."


class Duck:
    def quack(self):
        print("Quaaaaaack!")
    def feathers(self):
        print("The duck has white and gray feathers.")
    def swim(self):
        print("Swim seamlessly in the water")

class Person:
    def quack(self):
        print("The person imitates a duck.")
    def feathers(self):
        print("The person takes a feather from the ground and shows it.")
    def name(self):
        print("John Smith")

def in_the_forest(duck):
    duck.quack()
    duck.feathers()

def game():
    donald = Duck()
    john = Person()
    in_the_forest(donald)
    in_the_forest(john)

game()

что, если в in_the_forest я напишу:

  • шарлатан , как утка? да
  • есть ли у него утка ] перья ? да
  • отлично, у нас есть утка!

и позже, поскольку я знаю, что это утка, я хочу, чтобы она плавала ? john утонет!

Я не хочу, чтобы мое приложение вылетало (случайным образом) в середине процесса только из-за того, что Джон притворился уткой, но я думаю, было бы неразумно проверять каждую отдельную атрибуты объекта, когда я его получаю ...?

23
задан Kevin 5 July 2011 в 08:15
поделиться