Java 面向对象高级(一)超详细整理,从入门到精通 本篇承接面向对象基础内容讲解继承、Object 类、final 关键字、抽象类四大核心知识点配套语法规则、代码案例、内存解析、易错点与实战练习适合零基础学习、课后复习以及面试备考。一、继承继承是面向对象三大核心特征之一也是实现代码复用的核心手段。通过继承可以让类与类建立父子关系子类能够直接使用父类中非私有成员减少重复代码。1.1 继承概述1.1.1 核心概念继承使用extends关键字让两个类形成 ** 父类基类 / 超类和子类派生类关系子类可以直接复用父类的非私有属性和行为。当多个类存在大量共性内容且满足is-a是一个** 逻辑关系时就适合使用继承抽取共性到父类优化代码结构。1.1.2 使用场景举例合理场景学生、老师都属于 “人”都拥有姓名、年龄抽取共性定义Person父类学生、老师作为子类继承不合理场景程序员和商品都存在编号二者不存在is-a关系不建议强行继承。1.1.3 继承语法格式public class 子类名 extends 父类名 { // 子类独有成员 }示例// 父类员工 public class Employee { String name; int age; double salary; } // 子类程序员继承员工类 public class Coder extends Employee { } // 子类人事继承员工类 public class Hr extends Employee { }1.2 继承中成员变量访问规则就近原则子类、父存在重名成员变量时优先在当前类查找关键字super主动访问父类的成员变量格式super.变量名关键字this访问当前子类的成员变量格式this.变量名。完整演示案例public class Fu { int num 10; // 父类变量 } public class Zi extends Fu { int num 20; // 子类变量 public void method() { int num 30; // 局部变量 System.out.println(num); // 30 局部变量就近 System.out.println(this.num); // 20 本类成员变量 System.out.println(super.num);// 10 父类成员变量 } } public class Test { public static void main(String[] args) { Zi z new Zi(); z.method(); } }1.3 方法重写Override1.3.1 概念子类继承父类后对父类原有方法的逻辑进行修改、增强这个过程叫做方法重写 / 覆盖。1.3.2 重写语法要求方法名、参数列表、返回值必须和父类完全一致访问权限子类权限必须大于等于父类父类private私有方法子类无法重写。1.3.3 权限修饰符优先级由低到高private 默认权限 protectedpublic1.3.4 重写代码示例// 父类 public class Fu { public void method() { System.out.println(父类原有方法逻辑); } } // 子类重写方法 public class Zi extends Fu { Override // 重写注解校验语法合法性 public void method() { System.out.println(子类重写后的方法逻辑); } }1.4 Java 继承语法特点只支持单继承一个子类只能有一个直接父类不支持多继承原因若一个类同时继承多个父多个父存在同名方法时编译器无法区分调用逻辑。支持多层继承A 继承 B、B 继承 C形成继承链子类可以逐级复用上级父类成员。1.5 继承中的构造方法1.5.1 核心规则构造方法不能被继承子类必须手动定义自身构造子类所有构造方法中默认第一行隐藏super()作用是调用父类无参构造super()必须放在构造方法第一行且this()和super()不能同时存在。1.5.2 执行流程创建子类对象时先初始化父类空间 → 再初始化子类空间。1.5.3 综合案例学生 人员继承// 父类人类 public class Person { private String name; private int age; // 有参构造 public Person(String name, int age) { this.name name; this.age age; } // get/set方法 public String getName() { return name; } public int getAge() { return age; } } // 子类学生继承人类 public class Student extends Person { private int score; // 子类独有成绩 // 子类构造通过super调用父类有参构造 public Student(String name, int age, int score) { super(name, age); this.score score; } public int getScore() { return score; } } // 测试类 public class Test { public static void main(String[] args) { Student stu new Student(钢门吹雪, 23, 100); System.out.println(stu.getName() stu.getAge() stu.getScore()); } }1.6 this 与 super 完整对照表关键字访问成员变量访问成员方法访问构造方法thisthis.变量名访问本类this.方法名()访问本类this(参数)调用本类构造supersuper.变量名访问父类super.方法名()访问父类super(参数)调用父类构造补充this()和super()都要求写在构造方法第一行因此二者不能同时使用。1.7 实战综合案例员工体系需求定义父类Employee员工子类Coder程序员、Manager项目经理继承并重写工作方法。// 父类 员工 public class Employee { private String name; private int age; private double salary; public Employee(){} public Employee(String name, int age, double salary) { this.name name; this.age age; this.salary salary; } public void work() { System.out.println(员工开始工作); } // get/set public String getName() { return name; } public int getAge() { return age; } public double getSalary() { return salary; } } // 子类 程序员 public class Coder extends Employee { public Coder(String name, int age, double salary) { super(name, age, salary); } Override public void work() { System.out.println(getName() 正在编写代码); } } // 子类 项目经理 public class Manager extends Employee { private double bonus; // 独有奖金 public Manager(String name, int age, double salary, double bonus) { super(name, age, salary); this.bonus bonus; } Override public void work() { System.out.println(getName() 正在分配任务); } } // 测试 public class TestEmp { public static void main(String[] args) { Coder c new Coder(张三,23,15000); c.work(); Manager m new Manager(李四,24,18000,5000); m.work(); } }小结继承使用extends核心作用是复用代码满足is-a关系再使用重名变量遵循就近原则this访问本类、super访问父类方法重写要求声明一致、权限不缩小私有方法不能重写Java 单继承、多层继承子类构造默认调用父构造super必须在首行。二、Object 类2.1 类层级关系Object是 Java 中所有类的根父类所有类都会直接或间接继承它因此Object中的方法所有类都可以使用。2.2 toString () 方法2.2.1 默认效果默认toString()会返回类全限定名内存哈希地址直接打印对象默认调用该方法地址信息无实际业务意义。2.2.2 重写目的重写toString()让输出结果展示对象内部属性数据方便查看对象信息。2.2.3 代码示例// 自定义类默认继承Object public class Person { private String name; private int age; public Person(String name, int age) { this.name name; this.age age; } // 重写toString方法 Override public String toString() { return 姓名 name 年龄 age; } } public class Test { public static void main(String[] args) { Person p new 李四,22); // 自动调用重写后的toString System.out.println(p); } }小结Object是所有类的父类开发中必须重写 toString ()用于打印对象真实属性而非内存地址。三、final 关键字final译为 “最终、不可改变”可以修饰类、方法、变量被修饰的内容都具备不可修改的特性。3.1 final 修饰类规则被final修饰的类为最终类不能被继承示例public final class FinalDemo {}3.2 final 修饰方法规则被final修饰的方法为最终方法无法被重写应用核心通用方法禁止子类修改逻辑时使用。3.3 final 修饰变量变量分为基本类型、引用类型规则不同基本数据类型变量值一旦赋值无法修改等同于常量引用数据类型对象地址不可修改但对象内部的成员变量依然可以修改成员变量使用final必须在定义处 或 构造方法中完成赋值。代码示例// final修饰基本类型变量 final int NUM 10; // NUM 20; 报错值不可修改 // final修饰引用类型 final Person p new Person(王五,25); p.setName(赵六); // 内部属性可修改 // p new Person(赵六,26); 报错地址不可修改小结final 类禁止继承final 方法禁止重写final 变量基本类型值不变引用类型地址不变。四、抽象类abstract4.1 抽象类与抽象方法概念抽象方法只有方法声明没有方法体使用abstract修饰。当抽取父类共性行为但无法确定具体实现逻辑时定义为抽象方法抽象类包含抽象方法的类必须使用abstract修饰是一种特殊的父类。语法格式// 抽象类 public abstract class 类名 { // 抽象方法无方法体 public abstract void 方法名(); }4.2 抽象类核心注意事项抽象类不能实例化不能 new 对象防止调用无实现的抽象方法抽象类可以拥有构造方法供子类创建对象时通过super调用抽象类中可以包含普通成员变量、普通方法抽象类的子类二选一方案一重写父类所有抽象方法常用方案二子类也定义为抽象类。4.3 关键字冲突说明abstract不能和private、final、static联用abstract private抽象方法要求子类实现私有方法子类不可见矛盾abstract final抽象要求重写final 禁止重写矛盾abstract static静态方法可通过类名直接调用无方法体的抽象静态方法无意义。4.4 模板设计模式抽象类最典型应用模板设计模式思路抽象类定义通用代码模板将不确定的逻辑抽取为抽象方法子类继承后仅需实现抽象方法整体结构由模板固定简化开发。模板模式示例// 抽象模板类 public abstract class Template { // 通用模板方法 public void run() { step1(); step2(); step3(); } public void step1(){ System.out.println(通用步骤1); } // 不确定的步骤定义为抽象方法 public abstract void step2(); public void step3(){ System.out.println(通用步骤3); } } // 子类实现抽象方法 public class SubTemplate extends Template { Override public void step2() { System.out.println(子类自定义步骤2); } }小结抽象类 / 方法使用abstract修饰抽象方法无方法体抽象类不能 new但存在构造方法子类必须重写全部抽象方法或自身也设为抽象类抽象类常用场景为模板设计模式。五、本篇全文总结继承三大特征之一extends实现单继承依靠this/super区分父子成员构造默认调用父构造方法重写需遵守权限与语法规则Object 类Java 所有类的顶层父类开发中务必重写toString()打印对象属性final 关键字修饰类禁止继承、修饰方法禁止重写、修饰变量分基本 / 引用两种规则抽象类含抽象方法不能实例化用于抽取通用模板衍生出模板设计模式牢记关键字冲突规则。以上是面向对象进阶第一部分核心内容继承、抽象类是后续接口、多态、设计模式的基础建议多写案例巩固语法与使用场景。