资讯动态

细究Java三大特性之封装、继承、多态

发布时间:2026/9/2 12:04:07 来源:尧图企业网站定制
Java SE基础文章目录Java SE基础1. Java特性和优势2. Java的三大版本3. JDK、JRE、JVM三者关系JDKJava Development KitJava开发者工具包JREJava Runtime EnvironmentJava运行时环境JVMJava Virtual MachineJava虚拟机4.Java 三大特性以及其JavaSE重要基础知识4.1.封装4.1.1封装的好处4.2.继承4.2.1概念4.2.2 super讲解4.2.2.1super的主要用法4.2.3 方法重写1.实现子类的特定行为2.支持多态性4.3.多态4.3.1 多态定义4.3.11.多态性的体现4.3.2.2.代码的通用性和可扩展性4.3.2多态的注意事项1. Java特性和优势Java作为一种广泛使用的编程语言拥有以下特性和优势简单性Java的语法设计简洁明了易于学习和使用。它去除了C中的一些复杂特性例如指针操作和多重继承使得开发者能够更专注于逻辑实现。可移植性不限平台Java通过“一次编写到处运行”Write Once, Run Anywhere的理念实现了跨平台特性。只要目标设备支持Java虚拟机JVMJava程序无需修改即可运行。动态性反射Java支持运行时反射机制允许程序在运行时动态检查类、方法和属性甚至修改自身行为。这种特性在框架开发如Spring中尤为重要。分布式Java内置了对网络编程的支持如Socket、RMI等使得开发分布式应用程序如跨服务器通信的系统更加简单和高效。多线程Java提供了强大的多线程支持开发者可以通过线程类或Runnable接口轻松实现并发任务提高程序的执行效率。面向对象Java是一种纯粹的面向对象语言支持封装、继承和多态等特性有助于编写结构化、可重用的代码。健壮性Java通过强类型检查、异常处理机制和自动垃圾回收功能减少了程序出错的可能性提高了代码的稳定性。安全性Java内置了多层次的安全机制例如字节码验证、类加载器和安全管理器有效防止恶意代码的执行。2. Java的三大版本Java根据应用场景的不同分为以下三大版本**Java SEStandard Edition标准版**这是Java的核心版本主要用于开发桌面应用程序如Swing界面程序、控制台应用程序以及简单的服务器程序。它包含了Java的基础API和功能是其他版本的基础。**Java MEMicro Edition微型版**专为资源受限的嵌入式设备设计例如早期功能手机、PDA以及小型家电。它是Java SE的精简版适用于低功耗、低内存的场景。**Java EEEnterprise Edition企业版**企业版基于Java SE扩展专注于大规模、分布式、多层的企业级应用开发。它提供了丰富的API如Servlet、JSP、EJB等广泛用于Web开发、服务器端应用和企业系统。3. JDK、JRE、JVM三者关系这三个是Java生态系统中不可或缺的组成部分以下是它们的详细解释JDKJava Development KitJava开发者工具包JDK是面向开发者的完整工具集包含了编写、编译和调试Java程序所需的一切。它包括编译器javac将Java源代码编译为字节码。Java API提供丰富的类库供开发者调用。调试工具和其他实用程序。 JDK还包含了JRE因此安装JDK后即可运行Java程序。JREJava Runtime EnvironmentJava运行时环境JRE是运行Java程序的最小环境适合只需要执行Java应用而无需开发的普通用户。它包括Java虚拟机JVM负责执行字节码。Java核心类库提供运行时所需的基本功能如I/O、集合框架等。Java命令行工具如java命令。 JRE不包含开发工具因此无法编译Java代码。JVMJava Virtual MachineJava虚拟机JVM是Java跨平台特性的核心。它是一个虚拟化的运行环境负责将Java字节码.class文件解释或编译为本地机器码。管理内存包括垃圾回收。提供硬件和操作系统的抽象层。 每个Java程序运行时都会启动一个JVM实例。如下图清晰展示三者的关系4.Java 三大特性以及其JavaSE重要基础知识4.1.封装​ 口诀【 属性私有get/set】。当我们需要获取元素时使用get/set方法获取元素。​ 属性内可添加对数据添加的要求。样例代码importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);Stringnamesc.nextLine();intagesc.nextInt();PersonxiaomingnewPerson();xiaoming.setName(name);xiaoming.setAge(age);xiaoming.study();}}publicclassPerson{privateStringname;privateintage;Person(){}//无参构造方法Person(Stringname,intage){this.namename;this.ageage;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.namename;}publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age0||age100){System.out.println(您输入的年龄有误);}else{this.ageage;}}publicvoidstudy(){System.out.println(this.name is studying );}}在此案例中我们将name与age私有后就需要通过get/set方法修改或获取name/age元素4.1.1封装的好处1.提高程序的安全性保护数据2.隐藏代码的实现细节3.统一接口4.提高系统可维护性4.2.继承4.2.1概念使用关键字extends继承的本质是对某一批类的抽象从而实现对现实世界更好的建模。在java只有单继承没有多继承。在java中所有类继承与Object类4.2.2 super讲解简单来说super的作用即是调用或引用父类。使用注意点调用父类的构造方法必须只能出现在子类的方法或者构造方法中super和this 不能同时调用构造方法在子类的无参方法中系统自动调用父类的无参构造方法 4.2.2.1super的主要用法访问父类的成员变量使用super关键字可以在子类中访问父类中的成员变量。这对于在子类中有相同名字的成员变量时很有用以便明确指定你想要访问的是父类的成员变量。packagecom.sky.test;classParent{intx10;}classChildextendsParent{intx20;voiddisplay(){System.out.println(super.x);// 访问父类的x变量 10System.out.println(this.x);// 访问子类的x变量 20}}publicclassMain{publicstaticvoidmain(String[]args){ChildchildnewChild();child.display();}}调用父类中的构造方法在子类的构造函数中使用super关键字可以调用父类的构造函数。这通常用于初始化父类的成员变量或执行父类构造函数的逻辑。经常用在下面这种情况类中有些变量是子类继承父类的 利用super可调用父类的构造方法将其赋值代码案例classParent{intx;Parent(intx){this.xx;}}classChildextendsParent{inty;Child(intx,inty){super(x);// 调用父类构造函数 将x赋值this.yy;}// Override 不理解也没事不带上这个注解一样能正常运行Override// java中的注解 此处的意思是表明此方法是重写过的方法publicStringtoString(){// 返回带上child的成员变量值的字符串 x和yreturnChild{yy, xx};}}publicclassMain{publicstaticvoidmain(String[]args){ChildchildnewChild(10,20);System.out.println(child.toString());}}调用父类中的方法使用super关键字可以在子类中显式调用父类的方法。这在子类重写父类的方法时特别有用以便在子类中可以调用父类的版本。代码案例classParent{voidprint(){System.out.println(Parents print method);}}classChildextendsParent{Overridevoidprint(){super.print();// 调用父类的print方法System.out.println(Childs print method);}}publicclassMain{publicstaticvoidmain(String[]args){ChildchildnewChild();child.print();}}4.2.3 方法重写重写条件需要有继承关系子类重写父类的方法方法名必须相同参数列表必须相同修饰符范围可以扩大 publicprotecteddefaultprivate抛出的异常范围可以被缩小但不能扩大思考为什么需要重写1.实现子类的特定行为父类定义的方法可能只提供通用的实现但子类需要根据自己的特性提供特定的实现。通过重写方法子类可以覆盖父类的方法逻辑以适应自己的需求。classAnimal{voidsound(){System.out.println(Some generic animal sound);}}classDogextendsAnimal{Overridevoidsound(){System.out.println(Woof);// 子类提供具体实现}}2.支持多态性重写方法允许在运行时根据对象的实际类型调用相应的方法实现动态绑定。这使得代码更灵活可以通过父类引用调用子类的特定行为。AnimalmyDognewDog();myDog.sound();// 输出 Woof调用的是Dog的重写方法4.3.多态4.3.1 多态定义同一方法可以根据发送对象的不同而采用多种不同的行为方式对象能执行哪些方法主要看对象左边的类型和右边关系不大若方法被子类重写则执行子类的方法例如下面的案例是根据猫和狗叫的动作的不同而实现的多态classAnimal{publicvoidsound(){System.out.println(动物发出声音);}}classDogextendsAnimal{Overridepublicvoidsound(){System.out.println(狗发出汪汪声);}}classCatextendsAnimal{Overridepublicvoidsound(){System.out.println(猫发出喵喵声);}}publicclassMain{publicstaticvoidmain(String[]args){Animalanimal1newDog();// 父类引用指向子类对象Animalanimal2newCat();// 父类引用指向子类对象animal1.sound();// 输出狗发出汪汪声animal2.sound();// 输出猫发出喵喵声}}在这个示例中Animal类是父类Dog和Cat类是它的子类。通过将父类的引用变量分别指向子类对象实现了多态性。在运行时根据引用变量的实际类型来调用相应的子类方法从而输出不同的声音。思考为什么使用 Animal animal1 new Dog() 而不是 Dog dog new Dog()是为了利用 多态性Polymorphism的特性。以下是具体原因和分析4.3.11.多态性的体现当你使用父类引用Animal指向子类对象Dog 或 Cat时Java 在运行时会根据对象的实际类型Dog 或 Cat调用对应的重写方法**sound()**。这种行为称为 动态绑定 或 运行时多态。Animalanimal1newDog();animal1.sound();// 输出 狗发出汪汪声调用的是 Dog 类的 sound 方法这里animal1是Animal类型的引用但实际对象是 Dog因此运行时会调用 Dog 的 sound() 方法。如果直接使用 **Dog dog new Dog()**虽然也能调用 dog.sound() 得到相同的结果但你失去了多态的灵活性因为 dog 只能引用 Dog 类型的对象无法引用其他子类如 Cat。4.3.2.2.代码的通用性和可扩展性使用父类引用如 Animal可以让代码更通用适用于处理多种子类对象。例如你可以将 Dog 和 Cat 放入一个 Animal 类型的数组或集合中Animal[]animals{newDog(),newCat()};for(Animalanimal:animals){animal.sound();// 自动调用对应子类的 sound 方法}这允许你以统一的方式处理不同类型的子类对象而无需为每种子类写单独的代码。如果用Dog dog new Dog()你就只能处理Dog类型的对象无法直接处理Cat或其他Animal的子类代码的灵活性和可扩展性会降低。4.3.2多态的注意事项1.多态是方法的多态属性没有多态2.父类和子类有联系必要时需要类型转换包含以下关键字无法被重写的方法staticfinalprivate这就是JavaSE中三大特性的基本介绍包含用法和注意事项笔者编写不易如果您有任何想法或者文章中哪里有不足的地方欢迎评论区交流

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价