JavaRush /Java 博客 /Random-ZH /为什么需要接口继承?
Павел
第 11 级

为什么需要接口继承?

已在 Random-ZH 群组中发布
为什么需要接口? 为什么需要接口继承? 为什么需要多态性? 对于那些阅读并理解如何进行接口继承,但不明白为什么的人。上次我们以普通伊万诺夫家族为例,了解了为什么需要接口。我们继续将陷入困境的家庭数字化。每个人都有一些他没有从任何人那里遗传或遗传给任何人的习惯——他的个人习惯。我们的任务是为每个家庭成员提供独特的习惯。让我们转向 Java 层面:我们需要在类中实现仅属于这些类的独特方法。好吧,继续吧!这是彼佳:
class Петя implements ПривычкиПапы, ПривычкиМамы {

//это личные Петины привычки
public void ковырятьВНосу () {
System.out.println("Ковырь-ковырь");
    }

//это унаследованные привычки
@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать () {
System.out.println("Поджать губки");
    }
}
这是爸爸:
class Папа implements ПривычкиПапы {

//это личные Папины привычки
public void чесатьБороду () {
System.out.println("Чешу бороду");
    }

//это переданные привычки
   @Override
    public void прихлюпывать() {
     System.out.println("Хлюп");
   }
}
这是妈妈:
class Мама implements ПривычкиМамы{

//это личные Мамины привычки
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

//это переданные привычки
@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
完美的!一切都按其应有的方式进行!第一篇文章中说过,程序是现实世界的反映。现实最有趣的特性是它一直在变化。伊万诺夫家族也不例外;他们有一个可爱的女儿,名叫玛莎。她从妈妈那里继承了眨眼睫毛、从爸爸那里抽鼻子的习惯。我们需要改变我们的计划。 为什么需要接口继承? - 1算了,其实没那么难,最主要的是逻辑思维。毕竟,每个人都知道为什么需要接口。现在让我们创建一个接口 Masha's Habits,描述其中的clapElashes()squish()方法,将其实现给Masha,我们就完成了。那么如果其他接口中已经实现了同名的方法呢,一次性就可以了。 为什么需要接口继承? - 2确实,谁知道伊万诺夫家族有什么打算,如果谢廖扎出生了,他会继承爸爸、妈妈、曾祖父和其他第四代人的习惯,每次都会创建一个界面,比如:界面谢廖扎的习惯,还有声明已经可以在其他接口中声明数百次的方法?在几代人或三代人的时间里,我们可能会面临使用其他接口中已经描述的一堆相同方法的接口的风险,并且如果我们需要更改某些习惯的名称(这是很有可能的 - 毕竟世界正在发生变化) ,那么这个意大利面是怎么算出来的,我不敢想象。剩下的就是坐下来梦想奇迹。 为什么需要接口继承? - 3现在,如果每个习惯都有自己的界面。让我们想象一下:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
然后,就像在乐高中一样,我们可以使用个人习惯的多重继承,键入家庭中单个成员的习惯所需的界面。像这样的东西:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
然后简单地实现所需的接口到所需的类,例如,Mom:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
爸爸、彼佳和玛莎 也可以这样做。然后,随着伊万诺夫家族的壮大,习惯上就不会有问题了,我们只需在接口层面通过继承进行洗牌,就像沙拉里的配料一样,不会产生一堆同名的方法。呃,梦想,梦想…… 为什么需要接口继承? - 4画的人是对的,这其实是可能的——现在伊万诺夫家族的模拟得救了!细心的读者可能会问:“为什么要为每个家庭成员创建接口?我们有一组操作 - 立即为所需的类实现它们。” 让我们想象一下,在许多平行世界中都有Petya 的替身,并且所有Petya都需要实现Petya 的习惯接口
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
如果没有通用接口怎么办?
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
这会导致更多重复的代码。接口继承使得应用程序的改变更加灵活,特别是可以解决重复方法的问题。请再次注意,接口的多重继承是允许的。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION