java中接口和继承的区别
实际概念区别:
区别1:
不同的修饰符修饰(interface),(extends)
区别2:
在面向对象编程中可以有多继承!但是只支持接口的多继承,不支持’继承’的多继承哦
而继承在java中具有单根性,子类只能继承一个父类
就是有个类可以调用多个接口,但是只能继承一个父类
区别3:
在接口中只能定义全局常量和抽象方法
而在继承中可以定义属性方法,变量,常量等…
区别4:
某个接口被类实现时,在类中一定要实现接口中的抽象方法
而继承想调用那个方法就调用那个方法,毫无压力
接口的定义(使用interface关键字定义接口)
public interface People{
public void say();
}
接口的实现(使用类实现接口的关键字implements)
public class Chinese implements People{
public void say() {
System.out.println(" 你好!");
}
}
一个关于接口和继承的例子
首先定义一个父类Animal
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
}
定义了一个奔跑接口,内有一个抽象的奔跑方法
public interface IRunning {
void run();
}
定义了一个游泳接口,内有一个抽象的游泳方法
public interface ISwimming {
void swim();
}
再定义一个鱼类继承了Animal,实现了游泳方法的接口并对接口中的抽象方法进行了覆盖(override)
public class Fish extends Animal implements ISwimming{
public Fish(String name) {
super(name);
}
@Override
public void swim() {
System.out.println(this.name + "正在用尾巴游泳");
}
}
定义一个蛤蟆类继承了父类Animal的方法并实现了两个接口方法(继承只能有一个,但是接口方法可以有多个)
public class Frog extends Animal implements IRunning, ISwimming {
public Frog(String name) {
super(name);
}
@Override
public void run() {
System.out.println(this.name + "正在往前跳");
}
@Override
public void swim() {
System.out.println(this.name + "正在蹬腿游泳");
}
}
接口是:对功能的描述 继承是:什么是一种什么
打个比方:你可以有多个干爹(接口),但只能有一个亲爹( 继承)
举例:
如果狗的主人只是希望狗能爬比较低的树,但是不希望它继承尾巴可以倒挂在树上,像猴子那样可以飞檐走壁,以免主人管不住它。
那么狗的主人肯定不会要一只猴子继承的狗。
设计模式更多的强调面向接口。猴子有两个接口,一个是爬树,一个是尾巴倒挂。我现在只需要我的狗爬树,但是不要它尾巴倒挂,那么我只要我的狗实现爬树的接口就行了。同时不会带来像继承猴子来带来的尾巴倒挂的副作用。这就是接口的好处。
参考文章:
接口和继承区别