Java十五:封装和接口
一、封装1. 什么是封装封装是将对象的状态属性和行为方法包装在一起并隐藏内部实现细节只对外暴露必要的访问接口。2. 封装的实现方式① 使用访问修饰符修饰符同类同包子类任何地方private✅❌❌❌default无修饰符✅✅❌❌protected✅✅✅❌public✅✅✅✅public class Student { // 私有属性 - 隐藏内部状态 private String name; private int age; private double score; private ListString courses; // 构造方法 public Student(String name, int age) { this.name name; setAge(age); // 使用setter进行校验 this.courses new ArrayList(); } // 公开的getter方法 - 受控访问 public String getName() { return name; } public int getAge() { return age; } public double getScore() { return score; } // 公开的setter方法 - 包含业务逻辑和校验 public void setName(String name) { if (name null || name.trim().isEmpty()) { throw new IllegalArgumentException(姓名不能为空); } this.name name; } public void setAge(int age) { if (age 0 || age 150) { throw new IllegalArgumentException(年龄必须在0-150之间); } this.age age; } public void setScore(double score) { if (score 0 || score 100) { throw new IllegalArgumentException(分数必须在0-100之间); } this.score score; } // 业务方法 - 封装行为 public void addCourse(String course) { if (course null || course.isEmpty()) { throw new IllegalArgumentException(课程名不能为空); } courses.add(course); System.out.println(name 已添加课程 course); } public ListString getCourses() { // 返回副本保护内部数据不被外部修改 return new ArrayList(courses); } // 内部计算逻辑 - 对外隐藏 private String calculateGrade() { if (score 90) return A; if (score 80) return B; if (score 70) return C; if (score 60) return D; return F; } // 只暴露结果不暴露计算过程 public void printReport() { System.out.println(学生 name); System.out.println(年龄 age); System.out.println(分数 score); System.out.println(等级 calculateGrade()); System.out.println(课程数 courses.size()); } }二、接口1. 什么是接口接口是Java中的一种引用类型是方法的集合。2. 接口的基本语法// 定义接口 public interface Animal { // 常量默认 public static final String TYPE 动物; // 抽象方法默认 public abstract void eat(); void sleep(); // 默认方法Java 8 default void breathe() { System.out.println(呼吸空气); } // 静态方法Java 8 static void showType() { System.out.println(这是动物接口); } // 私有方法Java 9 private void privateHelper() { 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(狗用肺呼吸); } }3. 接口的多实现// 多个接口 interface Flyable { void fly(); } interface Swimmable { void swim(); } interface Runnable { void run(); } // 一个类可以实现多个接口 class Duck implements Flyable, Swimmable, Runnable { Override public void fly() { System.out.println(鸭子飞得很低); } Override public void swim() { System.out.println(鸭子游泳); } Override public void run() { System.out.println(鸭子走路摇摇摆摆); } }4. 接口的继承interface Vehicle { void start(); void stop(); } // 接口可以多继承 interface ElectricVehicle extends Vehicle { void charge(); } interface AutonomousVehicle extends Vehicle { void autoDrive(); } // 多继承 interface SmartElectricVehicle extends ElectricVehicle, AutonomousVehicle { void updateSoftware(); } // 实现类需要实现所有方法 class Tesla implements SmartElectricVehicle { Override public void start() { System.out.println(特斯拉启动); } Override public void stop() { System.out.println(特斯拉停止); } Override public void charge() { System.out.println(特斯拉充电); } Override public void autoDrive() { System.out.println(特斯拉自动驾驶); } Override public void updateSoftware() { System.out.println(特斯拉软件升级); } }5. 函数式接口// 函数式接口只有一个抽象方法的接口 FunctionalInterface interface Calculator { int calculate(int a, int b); // 可以有默认方法和静态方法 default void print() { System.out.println(计算结果); } } // 使用 Lambda 表达式 public class TestFunctional { public static void main(String[] args) { // 传统方式 Calculator add new Calculator() { Override public int calculate(int a, int b) { return a b; } }; // Lambda 方式 Calculator subtract (a, b) - a - b; Calculator multiply (a, b) - a * b; System.out.println(add.calculate(10, 5)); // 15 System.out.println(subtract.calculate(10, 5)); // 5 System.out.println(multiply.calculate(10, 5)); // 50 } }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2590794.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!