抽象类与接口
一个说我是谁,一个说我能做什么。
第一章 抽象类: 一个不完整的自己
抽象类,是一个半成品。
它把共性都写好了------名字、年龄、头发、肤色但是他不是一个完成的东西,你不能直接给他造出来。
csharp
public abstract class Animal{ //一个概念并不是一个实物
String name; //共性
public void sleep(){
//可继承到子类的方法
System.out.println(name+"睡着了")
}
//就像留给孩子的梦想蓝图,他需要自己去完成
public abstract void makeSound();
}
scala
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
}
狗需要自己才能发出叫声,抽象类只是给了它身体。
抽象类 是一个约定好你会是谁的半成品。 你不能 new 它,因为它不完整。但它替你想好了:你该有哪些共同的东西。
补充:只要类里面包含抽象方法,类就必须是abstract;但抽象类不一定非要包含抽象方法。
第二章 接口:我能做到的事
接口:是一个技能树
抽象类一个更倾向于给你一个身份,它是个狗,继承着动物这个爸爸。
但是他不能再继承会游泳的海豚这个爸爸。
而这就是接口可以做到的事情了。 他不看你是是谁,他只看你会不会。
csharp
// 一个会游泳的技能
public interface Swimmable {
void swim();
}
一个类,只可以有一个父类,但是可以用无数个接口(技能)
scala
public class Dog extends Animal implements Swimmable {
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
@Override
public void swim() {
System.out.println("狗刨式游泳");
}
}
接口是一个我能做到的承诺。 我不在乎你是什么,只要你承诺做得到,你就能实现我。
第三章 一张表,看清
| 抽象类(abstract class) | 接口(interface) | |
|---|---|---|
| 回答的问题 | 你是什么? | 你能做什么? |
| 生活类比 | 动物、人、车 | 会飞、会游泳、会充电 |
| 关键字 | extends(只能一个) |
implements(可以很多个) |
| 能 new 吗 | 不能 | 不能 |
第四章: 一句话总结
抽象类说你是谁(只能认一个父类),接口说你会啥。(可以有无数个技能)。