Java进阶——面向对象编程

打印 上一主题 下一主题

主题 976|帖子 976|积分 2928

        本篇文章,将深入探讨 Java 面向对象编程的关键知识点,并用一些例子展示这些概念的现实工作开辟中的应用。

  
一、 三大特性

1. 封装

封装是指隐藏对象的内部细节,通过 private 关键字控制对对象属性的访问,并提供 public 的 getter/setter 方法来实现对属性的安全访问和修改。
  1. public class User {
  2.     private String password;
  3.     public void setPassword(String input) {
  4.         if (isValidPassword(input)) {
  5.             this.password = encrypt(input);
  6.         }
  7.     }
  8.     private boolean isValidPassword(String input) {
  9.         // 密码验证逻辑
  10.         return input.length() >= 6;
  11.     }
  12.     private String encrypt(String input) {
  13.         // 加密逻辑
  14.         return "encrypted_" + input;
  15.     }
  16. }
复制代码
  getter/setter里面可以做一些简朴的逻辑
  2. 继承

Java 中的继承通过 extends 关键字实现,一个类只能继承一个父类。子类可以重写父类的方法,通过 @Override 注解显式声明。
  1. // 父类
  2. class Animal {
  3.     public void sound() {
  4.         System.out.println("sound");
  5.     }
  6. }
  7. // 子类
  8. class Dog extends Animal {
  9.     @Override
  10.     public void sound() {
  11.         System.out.println("barks");
  12.     }
  13. }
  14. public class Main {
  15.     public static void main(String[] args) {
  16.         Animal animal = new Dog();
  17.         animal.sound();            
  18.     }
  19. }
复制代码
3. 多态

多态分为编译时多态和运行时多态。编译时多态通过方法重载实现,运行时多态通过父类引用指向子类对象实现。
  1. // 方法重载
  2. class Calculator {
  3.     public int add(int a, int b) {
  4.         return a + b;
  5.     }
  6.     public double add(double a, double b) {
  7.         return a + b;
  8.     }
  9. }
  10. // 运行时多态
  11. class Animal {
  12.     public void sound() {
  13.         System.out.println("sound");
  14.     }
  15. }
  16. class Dog extends Animal {
  17.     @Override
  18.     public void sound() {
  19.         System.out.println("barks");
  20.     }
  21. }
  22. public class Main {
  23.     public static void main(String[] args) {
  24.         Animal animal = new Dog();  
  25.         animal.sound();            
  26.     }
  27. }
复制代码



二、 类与对象

1. 对象创建

利用 new 关键字触发构造方法调用,对象内存分配在堆中,引用变量存储在栈中。
  1. class Person {
  2.     String name;
  3.     public Person(String name) {
  4.         this.name = name;
  5.     }
  6. }
  7. public class Main {
  8.     public static void main(String[] args) {
  9.         Person person = new Person("John");
  10.         System.out.println(person.name);
  11.     }
  12. }
复制代码
2. 构造方法

构造方法与类同名,无返回类型,可以重载多个构造器。默认构造器在类未定义任何构造器时自动生成。
  1. class Car {
  2.     private String brand;
  3.     // 默认构造器
  4.     public Car() {
  5.         this.brand = "Unknown";
  6.     }
  7.     // 带参数的构造器
  8.     public Car(String brand) {
  9.         this.brand = brand;
  10.     }
  11.     public String getBrand() {
  12.         return brand;
  13.     }
  14. }
  15. public class Main {
  16.     public static void main(String[] args) {
  17.         Car car1 = new Car();
  18.         Car car2 = new Car("Toyota");
  19.         System.out.println(car1.getBrand());
  20.         System.out.println(car2.getBrand());
  21.     }
  22. }
复制代码
3. 静态成员

static 修饰的属性和方法属于类级别,通过类名直接访问。静态方法不能访问非静态成员(无 this 上下文)。
  1. class MathUtils {
  2.     public static final double PI = 3.14159;
  3.     public static double circleArea(double radius) {
  4.         return PI * radius * radius;
  5.     }
  6. }
  7. public class Main {
  8.     public static void main(String[] args) {
  9.         double area = MathUtils.circleArea(5);
  10.         System.out.println(area);
  11.     }
  12. }
复制代码



三、 访问控制修饰符

Java 提供了四种访问控制修饰符:private、默认、protected 和 public。
修饰符类内部同包子类其他包private✔✘✘✘默认✔✔✘✘protected✔✔✔✘public✔✔✔✔

四、方法相关

1. 方法签名

方法签名由方法名 + 参数列表构成(返回类型和异常不属于签名)。
2. final 关键字

final 可以修饰类(不可继承)、方法(不可重写)、变量(常量)。
  1. final class FinalClass {
  2.     // final 方法
  3.     public final void finalMethod() {
  4.         System.out.println("Final method");
  5.     }
  6. }
  7. public class Main {
  8.     public static void main(String[] args) {
  9.         final int MAX_VALUE = 100;
  10.         // MAX_VALUE = 200; // 编译错误,final 变量不可修改
  11.     }
  12. }
复制代码
3. 可变参数

  1. public class Main {
  2.     public void printItems(String... items) {
  3.         for (String item : items) {
  4.             System.out.println(item);
  5.         }
  6.     }
  7.     public static void main(String[] args) {
  8.         Main main = new Main();
  9.         main.printItems("1", "2", "3");
  10.     }
  11. }
复制代码



五、对象生命周期

对象的生命周期包括创建、利用和销毁三个阶段。对象由 new 关键字实例化,利用引用利用对象,最后由垃圾回收器自动回收无引用对象。



六、 高级特性

1. 接口和抽象类

特性接口抽象类实现方式implementsextends方法实现Java 8+ 支持默认方法可包含详细方法成员变量默认 public static final无限制多继承支持多接口继承单继承 2. 内部类

Java 中有四种内部类:成员内部类、静态内部类、局部内部类和匿名内部类。
  1. // 成员内部类
  2. class OuterClass {
  3.     private int outerField;
  4.     class InnerClass {
  5.         public void accessOuterField() {
  6.             System.out.println(outerField);
  7.         }
  8.     }
  9. }
  10. // 静态内部类
  11. class OuterClass2 {
  12.     private static int staticOuterField;
  13.     static class StaticInnerClass {
  14.         public void accessStaticOuterField() {
  15.             System.out.println(staticOuterField);
  16.         }
  17.     }
  18. }
  19. // 局部内部类
  20. class OuterClass3 {
  21.     public void outerMethod() {
  22.         final int localVariable = 10;
  23.         class LocalInnerClass {
  24.             public void accessLocalVariable() {
  25.                 System.out.println(localVariable);
  26.             }
  27.         }
  28.         LocalInnerClass inner = new LocalInnerClass();
  29.         inner.accessLocalVariable();
  30.     }
  31. }
  32. // 匿名内部类
  33. class Main {
  34.     public static void main(String[] args) {
  35.         Runnable task = new Runnable() {
  36.             @Override
  37.             public void run() {
  38.                 System.out.println("Task running");
  39.             }
  40.         };
  41.         new Thread(task).start();
  42.     }
  43. }
复制代码
3. 枚举类

利用 enum 关键字定义枚举类,自动继承 java.lang.Enum。
  1. public enum OrderStatus {
  2.     PENDING("待处理"), PAID("已支付");
  3.     private String desc;
  4.     OrderStatus(String desc) { this.desc = desc; }
  5.     public String getDesc() {
  6.         return desc;
  7.     }
  8. }
  9. public class Main {
  10.     public static void main(String[] args) {
  11.         OrderStatus status = OrderStatus.PENDING;
  12.         System.out.println(status.getDesc());
  13.     }
  14. }
复制代码



七、 对象关系

1. 组合

组合是一种强关联关系,团体与部分的生命周期同等。
  1. class Engine {
  2.     public void start() {
  3.         System.out.println("Engine started");
  4.     }
  5. }
  6. class Car {
  7.     private Engine engine = new Engine();
  8.     public void startCar() {
  9.         engine.start();
  10.     }
  11. }
  12. public class Main {
  13.     public static void main(String[] args) {
  14.         Car car = new Car();
  15.         car.startCar();
  16.     }
  17. }
复制代码
2. 聚合

聚合是一种弱关联关系,团体与部分可以独立存在。
  1. class Student {
  2.     private String name;
  3.     public Student(String name) {
  4.         this.name = name;
  5.     }
  6. }
  7. class Classroom {
  8.     private List<Student> students;
  9.     public Classroom(List<Student> students) {
  10.         this.students = students;
  11.     }
  12. }
  13. public class Main {
  14.     public static void main(String[] args) {
  15.         Student student1 = new Student("Alice");
  16.         Student student2 = new Student("Bob");
  17.         List<Student> students = List.of(student1, student2);
  18.         Classroom classroom = new Classroom(students);
  19.     }
  20. }
复制代码



总结

        面向对象编程的焦点在于明白类与对象的关系。



  ← 上一篇 Java进阶——Stream流以及常用方法详解             记得点赞、关注、收藏哦!        下一篇 Java进阶——注解一文全懂 →  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表