今天Java的学习内容是面向对象的三大特性封装、继承、多态。这是Java中非常核心的内容面试也经常考。说实话今天内容有点多脑子有点晕但整理完笔记后清晰多了。下面是我今天的学习总结。一、封装1. 修饰符private私有的只能在本类中使用public公开的任何地方都能用2. 封装的要求标准写法public class Student { // 1. 属性私有化 private String name; private int age; // 2. 提供公开的getter/setter方法 public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } }3. 使用方式Student stu new Student(); stu.setName(张三); stu.setAge(18); System.out.println(stu.getName() stu.getAge());封装的好处保护数据安全控制访问权限可以在set方法中添加逻辑校验。二、继承1. 概念继承体现的是is-a关系铅笔是一种笔狗是一种动物语法class 子类 extends 父类 { }示例// 父类 class Animal { String name; public void eat() { System.out.println(吃东西); } } // 子类 class Dog extends Animal { public void bark() { System.out.println(汪汪叫); } }2. 继承的好处提高代码复用性子类可以直接使用父类的属性和方法提高代码可扩展性可以在子类中添加新功能3. 方法覆盖Override/重写【面试重点】概念子类中定义和父类同名、同参、同返回值的方法。要求方法名、参数列表、返回值类型都要相同访问修饰符相同或更宽private→default→protected→public示例class Animal { public void sound() { System.out.println(动物叫); } } class Dog extends Animal { Override // 注解表示这是重写推荐加上 public void sound() { System.out.println(汪汪汪); } }使用子类对象调用时优先使用子类重写后的方法。面试题Override 和 Overload 的区别对比项Override重写Overload重载关系父子类之间同一个类中方法名相同相同参数列表必须相同必须不同返回值相同无要求修饰符相同或更宽无要求4. Java继承的特点单继承一个类只能有一个直接父类但可以有多个间接父类多级继承class A {} class B extends A {} // B的直接父类是A class C extends B {} // C的直接父类是B间接父类是A5. 子类能继承父类的哪些内容构造方法不能被继承因为构造方法名必须和类名一致属性和方法取决于访问修饰符修饰符能否被继承private❌ 不能default✅ 同包子类可以protected✅ 可以public✅ 可以6. 创建对象的过程继承情况下Dog d new Dog();执行顺序分配空间子类 所有父类的空间递归创建父类对象初始化父类属性 → 执行父类构造方法完成子类对象创建初始化子类属性 → 执行子类构造方法7. super关键字【面试重点】第一种用法super()/super(实参)在子类构造方法中指示调用父类的哪个构造方法。class Animal { public Animal() { System.out.println(父类无参构造); } public Animal(String name) { System.out.println(父类有参构造 name); } } class Dog extends Animal { public Dog() { super(); // 调用父类无参构造可以省略JVM默认添加 System.out.println(子类无参构造); } public Dog(String name) { super(name); // 调用父类有参构造 System.out.println(子类有参构造 name); } }规则super()必须写在构造方法第一行子类构造方法第一行如果没有super()/this()JVM会默认添加super()this()和super()不能同时出现在同一个构造方法中第二种用法super.用于调用父类的属性或方法。class Animal { String name 动物; } class Dog extends Animal { String name 狗; public void show() { System.out.println(name); // 狗 System.out.println(super.name); // 动物 } }三、多态1. 多态的前提必须有继承关系必须有方法重写父类引用指向子类对象2. 多态的语法父类类型 引用名 new 子类类型();示例Animal a new Dog(); // 父类引用指向子类对象 a.eat(); // 调用的是子类重写后的方法3. 多态的特点编译看左边运行看右边编译时检查父类中有没有这个方法运行时执行子类重写后的方法Animal a new Dog(); a.eat(); // ✅ 父类有eat()运行执行Dog的eat() a.bark(); // ❌ 编译报错父类中没有bark()方法4. 引用类型转换向上转型自动Dog d new Dog(); Animal a d; // 自动转换安全向下转型强制Animal a new Dog(); Dog d (Dog) a; // 强制转换需要保证实际类型是Dog注意如果实际类型不匹配会报ClassCastExceptionAnimal a new Dog(); Cat c (Cat) a; // 运行报错ClassCastException5. instanceof 关键字用于判断引用的实际对象类型是否兼容某个类。Animal a new Dog(); if (a instanceof Dog) { Dog d (Dog) a; System.out.println(转换成功); } if (a instanceof Cat) { Cat c (Cat) a; // 不会执行因为a实际上是Dog }在向下转型前建议先用instanceof判断避免类型转换异常。6. 多态的实际应用开发重点用在数组上Animal[] arr new Animal[3]; arr[0] new Dog(); arr[1] new Cat(); arr[2] new Bird();用在方法参数上public void feed(Animal a) { a.eat(); // 不管传什么动物都能调用eat() } // 调用 feed(new Dog()); feed(new Cat());用在返回值上public Animal getAnimal(int type) { if (type 1) { return new Dog(); } else { return new Cat(); } }7. 多态的好处屏蔽不同子类之间的差异性统一管理让程序更灵活、更通用四、我踩过的坑坑1封装时忘记提供getter/setterprivate int age; // 忘了写getAge()和setAge()外部无法访问解决属性私有化后必须提供公开的访问方法。坑2继承时子类构造方法没有调用父类构造方法class Parent { public Parent(String name) { // 有参构造 } } class Child extends Parent { public Child() { // 编译报错父类没有无参构造 } }解决子类构造方法中显式调用父类的有参构造super(name)。坑3方法重写时写错参数// 父类 public void eat() { } // 子类想重写但写成了重载 public void eat(String food) { } // 这是重载不是重写解决重写时参数列表必须完全相同建议加上Override注解检查。坑4向下转型时没做instanceof判断Animal a new Dog(); Cat c (Cat) a; // 运行报错解决转型前用instanceof判断。总结今天学的三大特性是面向对象的核心特性关键词核心要点封装privateget/set隐藏实现细节保护数据安全继承extends代码复用is-a关系单继承多态父类引用指向子类对象编译看左运行看右灵活通用面试高频题Override和Overload的区别访问修饰符的继承性super和this的区别多态的前提和特点instanceof的作用我接下来的任务把课堂上的案例都敲一遍比如动物继承体系、图形面积计算等加上注释再做一些练习题巩固。如果你也在学Java欢迎一起交流我们明天继续
Java——面向对象三大特性,封装、继承、多态
发布时间:2026/6/15 2:03:24
今天Java的学习内容是面向对象的三大特性封装、继承、多态。这是Java中非常核心的内容面试也经常考。说实话今天内容有点多脑子有点晕但整理完笔记后清晰多了。下面是我今天的学习总结。一、封装1. 修饰符private私有的只能在本类中使用public公开的任何地方都能用2. 封装的要求标准写法public class Student { // 1. 属性私有化 private String name; private int age; // 2. 提供公开的getter/setter方法 public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } }3. 使用方式Student stu new Student(); stu.setName(张三); stu.setAge(18); System.out.println(stu.getName() stu.getAge());封装的好处保护数据安全控制访问权限可以在set方法中添加逻辑校验。二、继承1. 概念继承体现的是is-a关系铅笔是一种笔狗是一种动物语法class 子类 extends 父类 { }示例// 父类 class Animal { String name; public void eat() { System.out.println(吃东西); } } // 子类 class Dog extends Animal { public void bark() { System.out.println(汪汪叫); } }2. 继承的好处提高代码复用性子类可以直接使用父类的属性和方法提高代码可扩展性可以在子类中添加新功能3. 方法覆盖Override/重写【面试重点】概念子类中定义和父类同名、同参、同返回值的方法。要求方法名、参数列表、返回值类型都要相同访问修饰符相同或更宽private→default→protected→public示例class Animal { public void sound() { System.out.println(动物叫); } } class Dog extends Animal { Override // 注解表示这是重写推荐加上 public void sound() { System.out.println(汪汪汪); } }使用子类对象调用时优先使用子类重写后的方法。面试题Override 和 Overload 的区别对比项Override重写Overload重载关系父子类之间同一个类中方法名相同相同参数列表必须相同必须不同返回值相同无要求修饰符相同或更宽无要求4. Java继承的特点单继承一个类只能有一个直接父类但可以有多个间接父类多级继承class A {} class B extends A {} // B的直接父类是A class C extends B {} // C的直接父类是B间接父类是A5. 子类能继承父类的哪些内容构造方法不能被继承因为构造方法名必须和类名一致属性和方法取决于访问修饰符修饰符能否被继承private❌ 不能default✅ 同包子类可以protected✅ 可以public✅ 可以6. 创建对象的过程继承情况下Dog d new Dog();执行顺序分配空间子类 所有父类的空间递归创建父类对象初始化父类属性 → 执行父类构造方法完成子类对象创建初始化子类属性 → 执行子类构造方法7. super关键字【面试重点】第一种用法super()/super(实参)在子类构造方法中指示调用父类的哪个构造方法。class Animal { public Animal() { System.out.println(父类无参构造); } public Animal(String name) { System.out.println(父类有参构造 name); } } class Dog extends Animal { public Dog() { super(); // 调用父类无参构造可以省略JVM默认添加 System.out.println(子类无参构造); } public Dog(String name) { super(name); // 调用父类有参构造 System.out.println(子类有参构造 name); } }规则super()必须写在构造方法第一行子类构造方法第一行如果没有super()/this()JVM会默认添加super()this()和super()不能同时出现在同一个构造方法中第二种用法super.用于调用父类的属性或方法。class Animal { String name 动物; } class Dog extends Animal { String name 狗; public void show() { System.out.println(name); // 狗 System.out.println(super.name); // 动物 } }三、多态1. 多态的前提必须有继承关系必须有方法重写父类引用指向子类对象2. 多态的语法父类类型 引用名 new 子类类型();示例Animal a new Dog(); // 父类引用指向子类对象 a.eat(); // 调用的是子类重写后的方法3. 多态的特点编译看左边运行看右边编译时检查父类中有没有这个方法运行时执行子类重写后的方法Animal a new Dog(); a.eat(); // ✅ 父类有eat()运行执行Dog的eat() a.bark(); // ❌ 编译报错父类中没有bark()方法4. 引用类型转换向上转型自动Dog d new Dog(); Animal a d; // 自动转换安全向下转型强制Animal a new Dog(); Dog d (Dog) a; // 强制转换需要保证实际类型是Dog注意如果实际类型不匹配会报ClassCastExceptionAnimal a new Dog(); Cat c (Cat) a; // 运行报错ClassCastException5. instanceof 关键字用于判断引用的实际对象类型是否兼容某个类。Animal a new Dog(); if (a instanceof Dog) { Dog d (Dog) a; System.out.println(转换成功); } if (a instanceof Cat) { Cat c (Cat) a; // 不会执行因为a实际上是Dog }在向下转型前建议先用instanceof判断避免类型转换异常。6. 多态的实际应用开发重点用在数组上Animal[] arr new Animal[3]; arr[0] new Dog(); arr[1] new Cat(); arr[2] new Bird();用在方法参数上public void feed(Animal a) { a.eat(); // 不管传什么动物都能调用eat() } // 调用 feed(new Dog()); feed(new Cat());用在返回值上public Animal getAnimal(int type) { if (type 1) { return new Dog(); } else { return new Cat(); } }7. 多态的好处屏蔽不同子类之间的差异性统一管理让程序更灵活、更通用四、我踩过的坑坑1封装时忘记提供getter/setterprivate int age; // 忘了写getAge()和setAge()外部无法访问解决属性私有化后必须提供公开的访问方法。坑2继承时子类构造方法没有调用父类构造方法class Parent { public Parent(String name) { // 有参构造 } } class Child extends Parent { public Child() { // 编译报错父类没有无参构造 } }解决子类构造方法中显式调用父类的有参构造super(name)。坑3方法重写时写错参数// 父类 public void eat() { } // 子类想重写但写成了重载 public void eat(String food) { } // 这是重载不是重写解决重写时参数列表必须完全相同建议加上Override注解检查。坑4向下转型时没做instanceof判断Animal a new Dog(); Cat c (Cat) a; // 运行报错解决转型前用instanceof判断。总结今天学的三大特性是面向对象的核心特性关键词核心要点封装privateget/set隐藏实现细节保护数据安全继承extends代码复用is-a关系单继承多态父类引用指向子类对象编译看左运行看右灵活通用面试高频题Override和Overload的区别访问修饰符的继承性super和this的区别多态的前提和特点instanceof的作用我接下来的任务把课堂上的案例都敲一遍比如动物继承体系、图形面积计算等加上注释再做一些练习题巩固。如果你也在学Java欢迎一起交流我们明天继续