编程自学指南:java程序设计开发,面向对象高级特性(抽象类、接口),为什么需要抽象类与接口?,抽象类,接口

面向对象高级特性(抽象类、接口)

学习目标

  1. 理解抽象类与接口的核心概念及区别

  2. 掌握抽象类和接口的定义与实现方法

  3. 能够合理选择抽象类或接口设计程序结构

  4. 结合实际场景应用多态与解耦


一、课程引入

1.1 为什么需要抽象类与接口?

  • 抽象类:抽取多个类的共性(如动物都有eat()方法,但实现不同)

  • 接口:定义行为规范(如USB设备必须实现connect()方法)

  • 设计目标

    • 提高代码复用性(抽象类)

    • 实现多继承效果(接口)

1.2 核心对比

特性抽象类接口(Java 8+)
定义方法可包含抽象/具体方法默认只含抽象方法(可含默认方法)
变量可包含成员变量只能包含常量(public static final
继承/实现单继承多实现
设计目标“是什么”(is-a关系)“能做什么”(has-a关系)

二、抽象类

2.1 抽象类的定义

语法

public abstract class 类名 {  
    // 抽象方法(无方法体)  
    public abstract void 方法名();  

    // 具体方法  
    public void 方法名() { ... }  
}
案例1:图形类抽象

public abstract class Shape {  
    // 抽象方法:计算面积  
    public abstract double calculateArea();  

    // 具体方法:公共逻辑  
    public void printInfo() {  
        System.out.println("这是一个图形");  
    }  
}  

// 子类必须实现抽象方法  
public class Circle extends Shape {  
    private double radius;  

    @Override  
    public double calculateArea() {  
        return Math.PI * radius * radius;  
    }  
}

2.2 抽象类的应用场景

  • 场景:多个子类有共同属性和方法,但部分行为需要不同实现

  • JDK示例InputStream是抽象类,FileInputStream是其子类


三、接口

3.1 接口的定义与实现

语法(Java 8+)

public interface 接口名 {  
    // 常量  
    String TYPE = "USB";  

    // 抽象方法(默认public abstract)  
    void connect();  

    // 默认方法(Java 8+)  
    default void check() {  
        System.out.println("接口自检完成");  
    }  

    // 静态方法(Java 8+)  
    static void printVersion() {  
        System.out.println("接口版本1.0");  
    }  
}
案例2:设备连接接口

public interface USBDevice {  
    void connect();  
    void disconnect();  
}  

// 实现类  
public class Mouse implements USBDevice {  
    @Override  
    public void connect() {  
        System.out.println("鼠标已连接");  
    }  

    @Override  
    public void disconnect() {  
        System.out.println("鼠标已断开");  
    }  
}

3.2 接口的多实现

案例3:智能手机功能

public interface Camera {  
    void takePhoto();  
}  

public interface GPS {  
    void locate();  
}  

// 类可实现多个接口  
public class SmartPhone implements Camera, GPS {  
    @Override  
    public void takePhoto() { ... }  

    @Override  
    public void locate() { ... }  
}

四、综合应用与设计模式

4.1 综合案例:门与报警系统

// 接口定义能力  
public interface Alarm {  
    void alarm();  
}  

// 抽象类定义共性  
public abstract class Door {  
    public abstract void open();  
    public abstract void close();  
}  

// 具体类组合功能  
public class SecurityDoor extends Door implements Alarm {  
    @Override  
    public void open() {  
        System.out.println("门已打开");  
    }  

    @Override  
    public void close() {  
        System.out.println("门已关闭");  
    }  

    @Override  
    public void alarm() {  
        System.out.println("触发警报!");  
    }  
}

4.2 面向接口编程的优势

  • 解耦:调用方依赖接口而非具体实现

  • 扩展性:新增实现类无需修改现有代码


五、常见错误与最佳实践

5.1 常见错误

  • 错误1:试图实例化抽象类或接口

    Shape shape = new Shape(); // 编译错误  
    USBDevice device = new USBDevice(); // 编译错误

    错误2:接口默认方法冲突

interface A { default void foo() {} }  
interface B { default void foo() {} }  
class C implements A, B {} // 编译报错,需重写foo()

5.2 设计原则

  • 优先使用接口:需要多继承或定义行为规范时

  • 合理使用抽象类:存在多个子类共享代码时


六、总结与练习

6.1 总结

  • 抽象类:抽取共性,包含实现细节

  • 接口:定义规范,支持多态扩展

  • 核心区别:单继承 vs 多实现,状态 vs 行为

6.2 课后任务

  1. 设计一个“支付系统”,定义Payment接口(含pay()方法),实现AlipayWechatPay

  2. 用抽象类实现“车辆管理系统”(如抽象类Vehicle,子类CarBike

  3. 预习下一节课:内部类与枚举

6.3 扩展挑战

  • 阅读JDK源码(如List接口与AbstractList抽象类),分析其设计思想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值