抽象类和抽象方法
猫狗案例 - 猫和狗继承了动物类
具体的类 和 抽象的类的区别
动物都有吃饭的方法
动物都有睡觉的方法
动物吃什么
动物怎么睡觉
动物具体吃什么 不知道(对于动物这个类而言,就是一个抽象的类)
某一个具体的动物 吃什么
猫吃鱼 狗吃骨头 羊吃草
狗趴着睡 马站着睡
动物这个类的睡觉的方法必须由子类动物来实现, 本身不需要实现,把本身不需要实现的方法称之为抽象方法
抽象方法 本身不需要 有方法体的方法, 就是抽象方法, 该方法不需要实现,由子类继承之后,重写实现
抽象方法所在的类就是抽象类
文具类 (抽象类)
笔
本
铅笔刀
水果 (抽象类)
苹果
梨
山竹
抽象语法
public abstract class fruit{
// 抽象方法 (没有方法体 )
public abstract void eat();
}
特点
- 抽象类不能创建对象, 只能通过继承关系, 由子类去创建父类对象
- 子类继承抽象类, 必须重写父类的所有抽象方法, 除非子类也是抽象类
抽象类和抽象方法关系
抽象方法所在的类 必须是抽象类
抽象类 可以没有抽象方法
有豪宅的人 一定是有钱人
有钱人 不一定有豪宅
抽象类中是拥有构造方法的
抽象类中可以 有普通属性,和普通方法
构造是给属性赋值使用的 , 抽象类有普通属性, 所以有给这些属性赋值的构造方法
接口
生活中的接口
键盘 鼠标 音响 U盘 是具有USB 功能的 设备
本身都具有自己的父类
键盘 继承 键盘类 (外设类) USB的功能 使用接口来描述 (接口也是一个功能)
接口从某种角度上来讲, 可以看做是一个特殊的抽象类,但是采用和抽象类完全不同的语法来表示, 两者的设计理念不同!
接口是功能的拓展
语法
public interface 接口名{
成员属性;
方法;
}
注意点
1- 和抽象类不同, 使用 interface 定义, 访问修饰符 必须是public
2- 成员属性必须是常量
- 成员方法必须是抽象方法
3- 实现接口使用 implements 来实现
4- 一个类可以实现多个接口
案例
// 定义USB 接口
public interface UsbInterface {
// 常量 (默认修饰符 为 public static final)
double SIZE = 1.5;
// 具体的执行流程
// 成员方法必须是抽象方法 (默认修饰符 public abstract)
void service();
}
public class UDisk implements UsbInterface{
@Override
public void service() {
System.out.println("链接USB 接口 开始传输数据!");
}
}
/**
* USB 小风扇 实现了 USB的接口
* 必须重写 接口中的所有抽象方法
*/
public class UsbFan implements UsbInterface{
@Override
public void service() {
System.out.println("链接USB 获取电流 风扇开始转动!");
}
}
public class Demo {
public static void main(String[] args) {
// 使用父接口 来接收子类对象 , 也是多态的一种实现方式
UsbInterface uDisk = new UDisk();
uDisk.service();
UsbInterface uFan = new UsbFan();
uFan.service();
}
}
接口与类之间的关系
接口和接口之间可以相互继承
public interface A {
void m1();
}
// 接口之间相互继承
public interface B extends A{
}
接口与类之间, 多实现
public class C implements A,B{}
在继承的同时, 实现多个接口
public class D extends C implements A,B {}
类与类之间 相互继承
接口和抽象类之间的对比
1- 接口是一个特殊的抽象类, 要比抽象类更抽象
2- 属性和方法
抽象类中可以有非抽象方法, 可以有普通成员属性
接口中 只有常量,抽象方法
3- 构造
抽象类存在构造方法, 接口中没有构造方法
4- 编程思想
抽象类 (is a) 是一个 - 猫继承了动物类, 猫是一个动物
接口 (have a) 有什么 - 鼠标实现了USB , 鼠标有USB的功能 (功能拓展)
5- 继承与实现关系
抽象类 继承关系, 只能单继承
接口 实现关系, 支持子类多实现
案例
猫狗案例
动物
猫
狗
/***************************************/
动物
会英语的猫
不会英语的猫
会英语的狗
不会英语的狗
接口的优势
- 可扩展性
- 避免单继承的弊端
设计原则
- 摘取代码中变化的行为, 形成接口
- 多用组合, 少用继承 (避免代码冗余)
- 针对接口编程, 不依赖于具体实现
- 开闭原则, 针对扩展开放,针对修改关闭