像网站分类一样的表格图怎么做,wordpress 菜单保存在哪里设置,怎么查网站空间,搭建服务器教程一、关于面向对象
1.1简介
Java 是一种面向对象编程语言#xff0c;其核心思想是面向对象编程#xff08;Object-Oriented Programming#xff0c;OOP#xff09;。
面向对象编程是一种程序设计范式#xff0c;它将数据与操作数据的方法#xff08;函数#xff09;捆…一、关于面向对象
1.1简介
Java 是一种面向对象编程语言其核心思想是面向对象编程Object-Oriented ProgrammingOOP。
面向对象编程是一种程序设计范式它将数据与操作数据的方法函数捆绑在一起以对象的形式呈现从而使程序更容易理解、灵活和可维护。
1.2背景
1.2.1面向过程的优缺点
面向过程Procedural Programming是一种以过程为中心的编程方法它通过一系列定义好的步骤来完成任务。面向过程与面向对象编程相比有以下优点和缺点
优点
简单易懂面向过程的编程模式具有简单的语法结构和直观的流程易于学习和掌握。执行效率高由于面向过程的程序不涉及到对象的创建和销毁等复杂的操作因此执行效率比面向对象的程序高。内存占用小面向过程的程序通常需要较少的内存空间因为它不需要为对象创建额外的内存空间。
缺点
缺乏灵活性面向过程的编程模式通常需要编写大量的代码并且代码的复杂度和维护难度都很高。面对变化的需求修改和维护代码将变得困难。不易扩展在面向过程的编程模式中程序被分为许多函数函数之间的数据交换通过参数来完成。如果需要添加新的功能可能需要修改许多函数的参数这将影响程序的可维护性和扩展性。不够直观由于面向过程的程序通常是一系列的函数调用函数之间的关系可能不够明显代码的结构不够直观难以理解和维护。
综上所述虽然面向过程的编程模式具有一些优点但其缺点更为突出难以满足现代软件开发的需要。因此在现代软件开发中更多地采用面向对象编程方法来实现更加灵活、可扩展和易于维护的软件系统。
1.2.2面向过程到面向对象
人们从面向过程发展出了面向对象是因为面向过程在处理大型软件系统时面临的问题越来越明显。面向过程将数据和操作分离导致代码结构复杂、维护困难难以适应现代软件开发的快速变化和需求的不断增加。
相比之下面向对象更加注重对象和行为将数据和操作集成在一个对象中。这种编程模式使得代码更加简洁、清晰、易于理解和维护而且可以更好地适应变化和扩展需求。例如面向对象提供了封装、继承和多态等特性可以更加灵活地组织代码实现高内聚、低耦合的代码结构。
另外随着软件规模的增加面向对象可以更好地管理和组织代码将复杂的系统分解为一些独立的对象并将其相互关联起来以更好地满足业务需求。面向对象还可以提高代码的重用性通过继承、接口和抽象类等机制避免了重复编写相似的代码提高了开发效率。
综上所述面向对象是一种更加现代、灵活、易于维护和扩展的编程模式它在处理大型软件系统时具有明显的优势因此成为了当今软件开发的主流编程模式。
1.2.3面向对象优缺点
面向对象编程OOP有以下优点和缺点。
优点
可重用性面向对象编程的一个主要优点是可以重用代码。面向对象编程中的继承和多态使得代码可以更容易地重用。通过继承子类可以重用父类的代码而不必重新编写。通过多态不同的对象可以共享相同的接口并根据需要提供不同的实现。可维护性面向对象编程可以使代码更易于维护。由于面向对象编程中的代码是基于对象和类的因此修改一个对象或类的代码不会影响其他代码。这使得代码更易于维护和修改。灵活性面向对象编程的另一个优点是灵活性。面向对象编程的抽象概念使得代码可以更好地适应需求的变化。由于代码是基于对象和类的因此可以更容易地添加新的对象或类并使代码更易于扩展。可读性面向对象编程可以使代码更易于理解。由于代码是基于对象和类的因此可以更容易地理解代码的意图。此外面向对象编程中的继承和多态也使得代码更易于理解。
缺点
复杂性面向对象编程的一个主要缺点是复杂性。由于面向对象编程涉及到多个对象和类之间的交互因此代码可能会变得非常复杂。此外面向对象编程还涉及到抽象概念这可能使代码更难理解。性能问题面向对象编程可能会带来一些性能问题。由于面向对象编程涉及到多个对象和类之间的交互因此可能会涉及到许多函数调用和内存分配这可能会对程序的性能产生负面影响。学习曲线面向对象编程需要对抽象概念和面向对象编程的范例有一定的理解和掌握。因此学习面向对象编程可能需要更多的时间和精力这可能会使得初学者更难入门。
总之面向对象编程具有可重用性、可维护性、灵活性和可读性等优点但也存在复杂性、性能问题和学习曲线等缺点。
1.2.4面向过程与面向对象区别
面向对象的优点容易维护、易扩展、易复用面向对象有封装、继承、多态的特征、可以设计出低耦合的系统使系统更加灵活、
面向对象的缺点性能比面向过程差
二者都是一种思想面向对象是相对于面向过程而言的
1-面向过程强调的是功能行为以函数为最小单位考虑怎么做
2-面向对象将功能封装进对象强调具备了功能的对象以类/对象为最小单位考虑谁来做
面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则如抽象分类继承聚合多态等
1.3面向对象核心思想
面向对象编程是一种程序设计的方法它将程序中的数据和操作封装在一个对象中。这个对象有自己的属性和方法可以与其他对象交互。面向对象编程的核心思想是把现实世界中的对象抽象成计算机程序中的对象这样就可以更加自然地描述问题和解决问题。
在面向对象编程中每个对象都有自己的状态和行为。状态表示对象当前的属性而行为表示对象能够进行的操作。通过将数据和操作封装在对象中我们可以隐藏实现细节并提供简单的接口这使得程序更容易理解、维护和重用。
另一个重要的概念是继承。继承可以帮助我们避免重复编写代码并且使代码更容易扩展。当一个类继承另一个类时它将继承其所有属性和方法同时还可以添加自己的属性和方法。
最后多态是面向对象编程的一个重要特征。多态意味着不同的对象可以对相同的方法做出不同的响应。这使得代码更加灵活可以更好地适应不同的场景。
总之面向对象编程是一种强大的编程方法它可以使代码更加模块化、易于理解和维护。通过把现实世界中的对象抽象成程序中的对象我们可以更好地解决复杂的问题。
1.3.1面向对象分析方法分析问题的思路和步骤 /* * 程序员从面向过程的执行者转化成了面向对象的指挥者 * 面向对象分析方法分析问题的思路和步骤 * 1-根据问题 需要选择问题所针对的现实世界中的实体 * 2-从实体中寻找解决问题相关的属性和功能这些属性和功能就形成了概念世界中的类 * 3-把抽象的实体用计算机语言进行描述形成计算机世界中类的定义即借助某种程序语言把类构造成计算机能够识别和处理的 数据结构 4-将类实例化成计算机世界中的对象对象是计算机世界中解决问题的最终工具
1.4Java如何实现面向对象思想
Java是一种面向对象编程语言它实现了面向对象编程思想。以下是Java如何实现面向对象编程的几个主要方面
类和对象在Java中类是创建对象的模板。通过定义类我们可以定义对象的属性和方法。而对象是类的实例它具有类定义的属性和方法。Java中的对象是通过使用new操作符实例化类来创建的。封装Java支持封装这意味着我们可以将类的内部实现隐藏起来并通过公共接口提供对类的访问。通过将数据和操作封装在类中我们可以更好地控制数据的访问和修改并提供更安全的编程环境。继承Java支持继承这意味着一个类可以从另一个类继承属性和方法。继承可以帮助我们避免重复编写代码并使代码更容易扩展。在Java中我们可以通过extends关键字创建子类并继承父类的属性和方法。多态Java支持多态这意味着不同的对象可以对相同的方法做出不同的响应。在Java中我们可以通过方法的重载和覆盖来实现多态。接口Java支持接口这是一种描述类所需实现的方法的结构。接口提供了一种方便的方式来定义类之间的协议并支持多重继承。
总之Java通过类和对象、封装、继承、多态和接口等特性实现了面向对象编程思想。这些特性提供了一种方便的方式来描述和解决问题并使得Java代码更加模块化、易于理解和维护。
二、类与对象
2.1简介
类类是一个模板它描述一类对象的行为和状态。对象对象是类的一个实例有状态和行为。例如一条狗是一个对象它的状态有颜色、名字、品种行为有摇尾巴、叫、吃等。
①类是对一类事物的描述是抽象的概念上的定义
②对象是实际存在的该类事物的每个个体因而也称其为实例(instance)
下图中汽车为类class 而具体的每辆车为该汽车类的对象object 对象包含了汽车的颜色、品牌、名称等。
对象是实际存在的该类事物的每个个体,因而也称其为实例(instance)
现实世界中我们定义了“人”这种抽象概念而具体的人则是“小明”、“小红”、“小军”等一个个具体的人。所以“人”可以定义为一个类class而具体的人则是实例instance
现实世界计算机模型Java代码人类 / classclass Person { }小明实例 / mingPerson ming new Person()小红实例 / hongPerson hong new Person()小军实例 / junPerson jun new Person()
同样的“书”也是一种抽象的概念所以它是类而《Java核心技术》、《Java编程思想》、《Java学习笔记》则是实例
现实世界计算机模型Java代码书类 / classclass Book { }Java核心技术实例 / book1Book book1 new Book()Java编程思想实例 / book2Book book2 new Book()Java学习笔记实例 / book3Book book3 new Book()
2.2示例
2.2.1定义class
在Java中创建一个类例如给这个类命名为Person就是定义一个class
class Person {public String name;public int age;
}
一个class可以包含多个字段field字段用来描述一个类的特征。
上面的Person类我们定义了两个字段一个是String类型的字段命名为name一个是int类型的字段命名为age。因此通过class把一组数据汇集到一个对象上实现了数据封装。
public是用来修饰字段的它表示这个字段可以被外部访问。
2.2.2创建实例
定义了class只是定义了对象模版而要根据对象模版创建出真正的对象实例必须用new操作符。
new操作符可以创建一个实例然后我们需要定义一个引用类型的变量来指向这个实例
Person ming new Person();上述代码创建了一个Person类型的实例并通过变量ming指向它。
注意区分Person ming是定义Person类型的变量ming而new Person()是创建Person实例。
有了指向这个实例的变量我们就可以通过这个变量来操作实例。访问实例变量可以用变量.字段例如
ming.name Xiao Ming; // 对字段name赋值
ming.age 12; // 对字段age赋值
System.out.println(ming.name); // 访问字段namePerson hong new Person();
hong.name Xiao Hong;
hong.age 15;
上述两个变量分别指向两个不同的实例它们在内存中的结构如下 ┌──────────────────┐
ming ──────│Person instance │├──────────────────┤│name Xiao Ming││age 12 │└──────────────────┘┌──────────────────┐
hong ──────│Person instance │├──────────────────┤│name Xiao Hong││age 15 │└──────────────────┘两个instance拥有class定义的name和age字段且各自都有一份独立的数据互不干扰。
一个Java源文件可以包含多个类的定义但只能定义一个public类且public类名必须与文件名一致。如果要定义多个public类必须拆到多个Java源文件中。
2.2.3构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法Java 编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候至少要调用一个构造方法。构造方法的名称必须与类同名一个类可以有多个构造方法。
下面是一个构造方法示例
public class Puppy{public Puppy(){}public Puppy(String name){// 这个构造器仅有一个参数name}
}
2.3面向对象的三大特征
2.3.1简介
面向对象的三个特征封装、继承、多态
继承让某个类型的对象获取另一个类型的对象的属性的方法继承就是子类继承父类的特征和行为使子类的对象具有父类的方法或者子类从父类继承方法 是子类具有父类相同的行为 使用extends关键字实现继承 继承就是子类自动共享父类的数据和方法是类与类之间的一种关系 提高了软件的可重用性和可扩展性
封装隐藏部分对象的属性和行为对数据的访问只能通过对外公开的接口通过这种方式对象对内部数据提供了不同级别的保护防止程序中无关紧要的部分意外的改变或者出错的是用来对象的私有部分
多态多态就是在声明的时候使用父类在实现或调用的时候使用具体的子类不修改代码既可以改变程序运行时所绑定的具体代码让程序可以选择多个运行状态这就是多态 对于同一个行为不同的子类对象具有不同的表现形式多态的存在要满足三个条件:
1继承
2方法重写
3父类引用指向子类的对象
2.3.2封装
简介
封装Encapsulation是面向对象编程的三大特性之一它指的是将数据属性和行为方法捆绑在一起对外部隐藏对象的内部实现细节只提供有限的访问方式。通过封装我们可以控制对对象的访问确保数据的安全性和一致性。
特点
数据隐藏封装可以将对象的内部状态字段隐藏起来只允许通过对象的方法来访问和修改数据而不直接暴露给外部。访问控制通过封装可以使用访问修饰符如 private、protected、public来控制对类的成员的访问权限确保数据的安全性。信息隐藏封装可以隐藏对象的内部实现细节只展示对外提供的接口降低了代码的耦合度使得对象更易于维护和扩展。
示例
修改属性的可见性来限制对属性的访问一般限制为private例如
public class Person { private String name; private int age;
}这段代码中将 name 和 age 属性设置为私有的只能本类才能访问其他类都访问不了如此就对信息进行了隐藏。
对每个值属性提供对外的公共方法访问也就是创建一对赋取值方法用于对私有属性的访问例如
public class Person{ private String name; private int age; public int getAge(){ return age; } public String getName(){ return name; } public void setAge(int age){ this.age age; } public void setName(String name){ this.name name; } }采用 this 关键字是为了解决实例变量private String name和局部变量setName(String name)中的name变量之间发生的同名的冲突。
2.3.3继承
简介
继承Inheritance是面向对象编程的重要特性之一它允许一个类子类基于另一个类父类来构建自己的特性和行为。通过继承子类可以获得父类的属性和方法同时可以重写父类的方法或添加新的方法和属性。
特点
子类和父类在 Java 中一个类可以派生出一个或多个子类子类继承了父类的属性和方法。extends 关键字通过使用 extends 关键字子类可以继承父类的非私有属性和方法。重写方法子类可以重写父类的方法以实现自己的特定逻辑。子类的方法签名必须与父类的方法相匹配。super 关键字子类可以使用 super 关键字调用父类的构造方法和方法。
优点 代码复用继承允许子类重用父类的属性和方法减少了重复编码。 多态性通过继承可以实现多态性即不同子类对象对同一消息做出不同响应。 层次结构通过继承可以建立类之间的层次结构提高代码的可维护性和扩展性。
示例
父类
package cn.csu.ksh;public class Person {private int a1;//父类私有成员变量private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id id;}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;}Overridepublic String toString() {return Person [id id , name name , age age ];}public void say() {System.out.println(person say..);}public void run() {System.out.println(person run....);}//父类的私有方法private void show() {System.out.println(person show...);}}
子类
package cn.csu.ksh;public class Student extends Person {Overridepublic void say() {super.say();}Overridepublic void run() {super.run();}public static void main(String[] args) {Student stu new Student();//stu.a1;//子类对象对父类的私有成员变量使用报错//stu.show();//子类对象调用父类的私有方法同样报错stu.say();stu.run();}
}继承的好处是实现代码的复用以及扩展子类通过对父类代码的复用可以不用再定义父类中已经定义的成员变量方法上直接对父类的方法进行重写实现了扩展。
2.3.4多态
简介
多态性Polymorphism是面向对象编程的重要概念之一它允许对象以不同的方式展现出其行为。多态性使得同一个方法可以在不同的对象上具有不同的行为这提高了代码的灵活性、可维护性和可扩展性。
多态就是同一个接口使用不同的实例而执行不同操作如图所示
特点
消除类型之间的耦合关系可替换性可扩充性接口性灵活性简化性
实现方式
方法重写Override 子类可以重写父类的方法当调用该方法时根据实际的对象类型决定执行哪个版本的方法。在运行时动态绑定方法调用。接口实现Interface Implementation 通过接口一个类可以实现多个接口在不同的上下文中表现出不同的行为。
示例
接口
package cn.csu.ksh;public interface Animal {void shout();
}
实现类
package cn.csu.ksh;public class Dog implements Animal{Overridepublic void shout() {System.out.println(wangwang...);}}
实现类
package cn.csu.ksh;public class Cat implements Animal {Overridepublic void shout() {System.out.println(miaomiao...);}}
测试
package cn.csu.ksh;public class AnimalTest {public static void main(String[] args) {//父类的引用指向子类对象Animal d new Dog();animalShout(d);//父类的引用指向子类对象Animal c new Cat();animalShout(c);}public static void animalShout(Animal animal) {animal.shout();}
}
2.4接口
2.4.1简介
接口interface是一种抽象类型它定义了一组方法的签名但没有具体的实现。接口可以包含常量、方法声明、默认方法、静态方法和私有方法。接口提供了一种将方法声明与实现分离的方式使得不同类可以实现相同的接口并提供自己的具体实现。
在Java中接口可以使用interface关键字来定义。
2.4.2示例
在这个示例中我们定义了一个名为Swimable的接口并添加了一个公共方法swim。 public interface Swimable {public void swim();}
接口可以被类实现实现接口的类必须实现接口中定义的所有方法。以下是一个示例代码展示了如何使用接口来实现Swimable接口
public class Duck implements Swimable {public void swim() {System.out.println(The duck is swimming.);}}在这个示例中我们定义了一个名为Duck的类并使用implements关键字来实现Swimable接口并实现了接口中定义的方法swim。
总之Java的接口可以用于各种应用程序的开发可以帮助开发人员更好地描述和解决问题并使得Java代码更加模块化、易于理解和维护。
2.5抽象类
2.5.1简介
抽象类Abstract Class是一种特殊的类它不能被实例化只能被用作其他类的父类。抽象类通常用于定义子类共同的属性和方法以便子类继承和实现这些方法。
2.5.2特点
不能被实例化抽象类不能直接实例化对象只能用作其他类的父类。包含抽象方法抽象类中可以包含抽象方法这些方法没有具体的实现需要子类去实现。可以包含普通方法抽象类中可以包含普通的方法这些方法有具体的实现子类可以选择性地重写这些方法。
抽象类的优点
提高代码的复用性将公共的方法抽象到抽象类中可以被多个子类共享。约束子类通过抽象类定义抽象方法强制子类去实现这些方法确保子类的一致性。
2.5.3示例
// 抽象类
abstract class Shape {protected String color;public Shape(String color) {this.color color;}// 抽象方法public abstract double calculateArea();// 普通方法public void displayColor() {System.out.println(The color of the shape is: color);}
}// 子类
class Circle extends Shape {private double radius;public Circle(String color, double radius) {super(color);this.radius radius;}Overridepublic double calculateArea() {return Math.PI * radius * radius;}
}public class AbstractClassExample {public static void main(String[] args) {Shape circle new Circle(Red, 5.0);System.out.println(Area of the circle: circle.calculateArea());circle.displayColor();}
}
Shape 是一个抽象类定义了一个抽象方法 calculateArea 和一个普通方法 displayColor。Circle 类继承自 Shape 类并实现了 calculateArea 方法。在主类 AbstractClassExample 中创建了一个 Circle 对象并调用了其方法。