Java从入门到精通二面向对象实战类、封装、继承、多态这是“Java从入门到精通”系列第2篇。上一篇我们完成了语法基础这一篇进入Java最核心的思想面向对象。你将掌握类与对象、封装、继承、多态并完成一个可运行的小型“学生管理系统”核心模型。一、学习目标理解“对象”如何映射现实世界。会用类封装属性和行为。掌握继承复用与方法重写。理解多态的实战价值面向接口编程。二、类与对象从现实抽象到代码类是模板对象是实例。class Student { String name; int age; void study() { System.out.println(name 正在学习); } } public class Main { public static void main(String[] args) { Student s new Student(); s.name Alice; s.age 20; s.study(); } }这段代码能运行但有一个问题属性完全暴露外部可以随意改不安全。三、封装把“可变性”关进笼子封装的核心属性私有化通过方法控制读写。class Student { private String name; private int age; public Student(String name, int age) { this.name name; setAge(age); } public String getName() { return name; } public int getAge() { return age; } public void setAge(int age) { if (age 0 || age 120) { throw new IllegalArgumentException(年龄非法); } this.age age; } public void study() { System.out.println(name 正在学习Java); } }封装不是“多写几个getter/setter”而是保证对象状态始终合法。四、继承复用公共能力当多个类有共性就抽父类。class Person { protected String name; public Person(String name) { this.name name; } public void introduce() { System.out.println(我是 name); } } class Teacher extends Person { private String subject; public Teacher(String name, String subject) { super(name); this.subject subject; } Override public void introduce() { System.out.println(我是教师 name 教授 subject); } }注意继承表达“is-a”关系。Teacher 是 Person所以可以继承。五、多态统一接口灵活扩展多态让你“面向抽象编程”而不是绑死具体实现。abstract class Course { public abstract void start(); } class JavaCourse extends Course { Override public void start() { System.out.println(Java课程开课讲解OOP); } } class DatabaseCourse extends Course { Override public void start() { System.out.println(数据库课程开课讲解MySQL); } } public class Main { public static void main(String[] args) { Course c1 new JavaCourse(); Course c2 new DatabaseCourse(); c1.start(); c2.start(); } }以后新增课程类型时不需要改调用方逻辑这就是多态的工程价值。六、实战学生管理系统核心模型可运行import java.util.ArrayList; import java.util.List; class Student { private final int id; private String name; private int score; public Student(int id, String name, int score) { this.id id; this.name name; setScore(score); } public int getId() { return id; } public String getName() { return name; } public int getScore() { return score; } public void setName(String name) { this.name name; } public void setScore(int score) { if (score 0 || score 100) { throw new IllegalArgumentException(分数必须在0-100之间); } this.score score; } Override public String toString() { return Student{id id , name name , score score }; } } interface StudentService { void add(Student s); Student findById(int id); ListStudent listAll(); } class StudentServiceImpl implements StudentService { private final ListStudent students new ArrayList(); Override public void add(Student s) { if (findById(s.getId()) ! null) { throw new IllegalArgumentException(学号重复: s.getId()); } students.add(s); } Override public Student findById(int id) { for (Student s : students) { if (s.getId() id) return s; } return null; } Override public ListStudent listAll() { return students; } } public class Main { public static void main(String[] args) { StudentService service new StudentServiceImpl(); service.add(new Student(1, Alice, 88)); service.add(new Student(2, Bob, 76)); System.out.println( 全部学生 ); for (Student s : service.listAll()) { System.out.println(s); } System.out.println( 查询学号2 ); System.out.println(service.findById(2)); } }运行方式javac Main.java java Main七、常见误区把继承当万能复用工具实际上组合优先于继承。只会写getter/setter不做参数合法性校验。忽略接口导致代码和具体实现耦合。重写方法时忘记Override容易埋Bug。八、总结与下篇预告面向对象不是语法技巧而是建模能力。你写的不是“代码片段”而是“稳定可扩展的对象系统”。下一篇我们进入集合框架List、Set、Map的底层逻辑与选型策略并做一个“排行榜系统”实战。建议把本文实战代码改造成支持“按姓名搜索”和“更新成绩”练习面向接口扩展。