Java接口案例如何基础编写

wen java案例 30

本文目录导读:

Java接口案例如何基础编写

  1. 基础接口定义
  2. 多接口实现
  3. 实际业务案例
  4. 接口继承
  5. 测试代码
  6. 接口使用建议

我来详细介绍Java接口的基础编写方法,通过几个实际案例帮助你理解。

基础接口定义

简单接口示例

// 定义一个动物行为接口
public interface Animal {
    // 抽象方法(没有方法体)
    void eat();
    void sleep();
    // Java 8+ 可以定义默认方法
    default void breathe() {
        System.out.println("呼吸空气");
    }
    // Java 8+ 可以定义静态方法
    static void describe() {
        System.out.println("这是一只动物");
    }
}

实现接口

// 实现动物接口的狗类
public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("狗在吃狗粮");
    }
    @Override
    public void sleep() {
        System.out.println("狗在狗窝睡觉");
    }
    // 可选:重写默认方法
    @Override
    public void breathe() {
        System.out.println("狗用鼻子呼吸");
    }
}
// 实现动物接口的猫类
public class Cat implements Animal {
    @Override
    public void eat() {
        System.out.println("猫在吃鱼");
    }
    @Override
    public void sleep() {
        System.out.println("猫在沙发上睡觉");
    }
}

多接口实现

实现多个接口

// 定义飞行接口
public interface Flyable {
    void fly();
}
// 定义游泳接口
public interface Swimmable {
    void swim();
}
// 鸭子实现多个接口
public class Duck implements Animal, Flyable, Swimmable {
    @Override
    public void eat() {
        System.out.println("鸭子吃水草和小鱼");
    }
    @Override
    public void sleep() {
        System.out.println("鸭子在水边睡觉");
    }
    @Override
    public void fly() {
        System.out.println("鸭子飞起来了");
    }
    @Override
    public void swim() {
        System.out.println("鸭子在游泳");
    }
}

实际业务案例

数据库操作接口

// 定义数据访问接口
public interface UserDao {
    // 增
    void addUser(User user);
    // 删
    void deleteUser(int id);
    // 改
    void updateUser(User user);
    // 查
    User getUserById(int id);
    List<User> getAllUsers();
}
// User实体类
public class User {
    private int id;
    private String name;
    private String email;
    // 构造方法
    public User(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }
    // getter和setter方法
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}
// 内存实现
public class UserDaoImpl implements UserDao {
    private List<User> users = new ArrayList<>();
    private int currentId = 1;
    @Override
    public void addUser(User user) {
        user.setId(currentId++);
        users.add(user);
    }
    @Override
    public void deleteUser(int id) {
        users.removeIf(user -> user.getId() == id);
    }
    @Override
    public void updateUser(User user) {
        for (int i = 0; i < users.size(); i++) {
            if (users.get(i).getId() == user.getId()) {
                users.set(i, user);
                break;
            }
        }
    }
    @Override
    public User getUserById(int id) {
        for (User user : users) {
            if (user.getId() == id) {
                return user;
            }
        }
        return null;
    }
    @Override
    public List<User> getAllUsers() {
        return new ArrayList<>(users);
    }
}

接口继承

接口之间的继承

// 基础接口
public interface Vehicle {
    void start();
    void stop();
}
// 扩展接口
public interface Car extends Vehicle {
    void honk();
    void accelerate();
}
// 高级接口
public interface LuxuryCar extends Car {
    void autoPark();
    void massageSeat();
}
// 实现最具体的接口
public class BMW implements LuxuryCar {
    @Override
    public void start() {
        System.out.println("宝马启动");
    }
    @Override
    public void stop() {
        System.out.println("宝马停止");
    }
    @Override
    public void honk() {
        System.out.println("宝马按喇叭");
    }
    @Override
    public void accelerate() {
        System.out.println("宝马加速");
    }
    @Override
    public void autoPark() {
        System.out.println("宝马自动泊车");
    }
    @Override
    public void massageSeat() {
        System.out.println("宝马座椅按摩");
    }
}

测试代码

public class InterfaceDemo {
    public static void main(String[] args) {
        // 测试动物接口
        System.out.println("=== 动物测试 ===");
        Animal dog = new Dog();
        Animal cat = new Cat();
        dog.eat();
        dog.sleep();
        dog.breathe();
        Animal.describe();  // 调用静态方法
        System.out.println();
        cat.eat();
        cat.sleep();
        // 测试多实现
        System.out.println("\n=== 鸭子测试 ===");
        Duck duck = new Duck();
        duck.eat();
        duck.fly();
        duck.swim();
        // 测试用户DAO
        System.out.println("\n=== 用户数据库测试 ===");
        UserDao userDao = new UserDaoImpl();
        userDao.addUser(new User(0, "张三", "zhangsan@email.com"));
        userDao.addUser(new User(0, "李四", "lisi@email.com"));
        List<User> users = userDao.getAllUsers();
        for (User user : users) {
            System.out.println("ID: " + user.getId() + 
                             ", 名称: " + user.getName() + 
                             ", 邮箱: " + user.getEmail());
        }
    }
}

接口使用建议

定义接口时的注意事项

public interface BestPractices {
    // 1. 接口名应该体现功能
    // 好的命名:Drawable, Readable, Comparable
    // 不好的命名:IDoThings, IMethod
    // 2. 方法应该抽象且单一职责
    void save(String data);  // 好的:单一功能
    void process(String input);  // 模糊:职责不明确
    // 3. 参数类型用接口而不是具体类
    void processList(List<String> list);  // 好的
    // void processList(ArrayList<String> list);  // 不好的
    // 4. 返回值也用接口
    List<String> getNames();  // 好的
    // ArrayList<String> getNames();  // 限制太死
}

通过以上案例,你可以看到Java接口的基本使用方法,记住几个要点:

  • 接口定义规范行为
  • 类可以实现多个接口(弥补单继承的不足)
  • 接口可以继承接口
  • Java 8+支持默认方法和静态方法

实践是最好的学习方式,建议你动手敲一遍这些代码并尝试修改。

抱歉,评论功能暂时关闭!