请用通俗易懂的语言或文章链接进行解释。
当前回答
界面是一个对象可以做的动作的描述…例如,当你拨动一个灯开关,灯亮了,你不在乎怎么做,只是它做了。在面向对象编程中,接口是一个对象为了成为“X”而必须具有的所有功能的描述。同样,作为一个例子,任何“像”灯光的东西都应该有turn_on()方法和turn_off()方法。接口的目的是让计算机强制执行这些财产,并知道TYPE T的对象(无论接口是什么)必须具有名为X、Y、Z等的函数。
接口是一种编程结构/语法,允许计算机在对象(类)上强制执行某些财产。例如,假设我们有汽车类、滑板车类和卡车类。这三个类中的每一个都应该有一个start_engine()操作。每个车辆的“引擎如何启动”取决于每个特定的类,但它们必须有一个start_engine动作这一事实是接口的领域。
其他回答
如下图所示,一个类扩展另一个类,一个接口扩展了另一个接口,但一个类实现了一个接口。
有关详细信息
当您想要子类/接口中的父类/接口的属性时,使用extends;当您想要类中的接口的属性的时候,使用implements。
例子:
使用类扩展类父级{}类Child扩展Parent{}使用接口扩展接口父级{}接口子级扩展父级{}机具接口A{}B类实现A{}延伸和机具的组合接口A{}B类{}C类实现A,扩展B{}
extends用于从基类继承时(即扩展其功能)。
implements用于实现接口时。
这里是一个很好的开始:接口和继承。
只有当子类想要使用SuperClass中已经声明的某些功能(方法或实例变量),或者我想要稍微修改SuperClass的功能(方法重写)时,我们才使用SubClass扩展SuperClass。但是,比方说,我有一个Animal类(SuperClass)和一个Dog类(SubClass),我在Animal中定义的方法很少,例如doEat(),doSleep()。。。以及更多。
现在,我的狗类可以简单地扩展Animal类,如果我希望我的狗使用Animal中声明的任何方法,我可以通过创建一个狗对象来调用这些方法。这样我就可以保证我有一只能吃能睡的狗,可以做我想让狗做的任何事情。
现在,想象一下,有一天,一个爱猫的人来到我们的工作场所,她试图扩展动物课程(猫也吃也睡)。她创建了一个Cat对象并开始调用这些方法。
但是,比方说,有人试图成为Animal类的对象。你可以分辨猫是如何睡觉的,你可以分辨狗是如何进食的,你也可以分辨大象是如何喝水的。但它在制作Animal类的对象时没有任何意义。因为这是一个模板,我们不想要任何一般的饮食方式。
因此,我更倾向于创建一个抽象类,没有人可以实例化,但可以用作其他类的模板。
总之,Interface只是一个抽象类(纯抽象类),它不包含方法实现,只包含定义(模板)。因此,实现接口的人只知道他们有doEat()的模板;和doSleep();但他们必须定义自己的doEat();和doSleep();方法。
只有当您想要重用SuperClass的某些部分时(但请记住,您始终可以根据需要重写SuperClass的方法),才可以进行扩展,并且当您需要模板并且希望自己定义模板时(根据需要),才可实现。
我将与您分享一段代码:您可以尝试使用不同的输入集并查看结果。
class AnimalClass {
public void doEat() {
System.out.println("Animal Eating...");
}
public void sleep() {
System.out.println("Animal Sleeping...");
}
}
public class Dog extends AnimalClass implements AnimalInterface, Herbi{
public static void main(String[] args) {
AnimalInterface a = new Dog();
Dog obj = new Dog();
obj.doEat();
a.eating();
obj.eating();
obj.herbiEating();
}
public void doEat() {
System.out.println("Dog eating...");
}
@Override
public void eating() {
System.out.println("Eating through an interface...");
// TODO Auto-generated method stub
}
@Override
public void herbiEating() {
System.out.println("Herbi eating through an interface...");
// TODO Auto-generated method stub
}
}
定义的接口:
public interface AnimalInterface {
public void eating();
}
interface Herbi {
public void herbiEating();
}
A延伸B:A和B都是类或都是接口A机具BA是类,B是接口剩下的A是接口而B是类的情况在Java中是不合法的。
推荐文章
- 如何分割逗号分隔的字符串?
- Java字符串—查看字符串是否只包含数字而不包含字母
- Mockito.any()传递带有泛型的接口
- 在IntelliJ 10.5中运行测试时,出现“NoSuchMethodError: org.hamcrest. matcher . descripbemismatch”
- 使用String.split()和多个分隔符
- Java数组有最大大小吗?
- 在Android中将字符串转换为Uri
- 从JSON生成Java类?
- 为什么我不能继承静态类?
- 为什么java.util.Set没有get(int index)?
- Swing和AWT的区别是什么?
- TypeScript中的extends和implements有什么区别
- 为什么Java流是一次性的?
- 四舍五入BigDecimal *总是*有两位小数点后
- 设计模式:工厂vs工厂方法vs抽象工厂