Java为什么要继承、封装和多态
- 格式:wps
- 大小:12.00 KB
- 文档页数:2
封装、继承和多态的概念
封装、继承和多态是面向对象编程中的三个重要概念,下面分别进行详细解释:
一、封装
封装是指将对象的属性和方法封装在一起,形成一个独立的单元,对外部隐藏对象的实现细节,只暴露必要的接口供外部使用。
封装可以有效地保护对象的数据和行为,避免外部的误操作和非法访问,提高了代码的安全性和可维护性。
在面向对象编程中,封装是实现信息隐藏和数据保护的重要手段。
二、继承
继承是指一个类可以从另一个类中继承属性和方法,从而可以重用已有的代码和功能。
继承是面向对象编程中实现代码复用的重要手段,可以减少代码的重复性,提高代码的可读性和可维护性。
继承可以分为单继承和多继承两种方式,单继承是指一个类只能从一个父类中继承,而多继承是指一个类可以从多个父类中继承属性和方法。
三、多态
多态是指同一个方法在不同的对象上可以有不同的行为,即同一个方法可以有多
种不同的实现方式。
多态是面向对象编程中的重要概念,可以提高代码的灵活性和可扩展性。
多态可以分为编译时多态和运行时多态两种方式,编译时多态是指方法的重载,即同一个类中可以有多个同名但参数不同的方法;而运行时多态是指方法的重写,即子类可以重写父类的方法,从而实现不同的行为。
通过多态,可以实现面向对象编程中的“开闭原则”,即对扩展开放,对修改关闭。
JAVA的三⼤特性众所周知,java的三⼤特性为:封装,继承和多态。
⼀、封装1. 封装就是将类的信息隐藏在类内部,不允许外部程序直接访问,⽽是通过该类的⽅法实现对隐藏信息的操作和访问。
2. 封装是怎么实现的呢?a. 需要修改属性的访问控制符(修改为private);b. 创建getter/setter⽅法(⽤于属性的读写);c. 在getter/setter⽅法中加⼊属性控制语句(⽤于判断属性值的合法性);public class Student {private String id;private int score;public String getId() {return id;}public void setId(String id) {this.id = id;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}}封装不是简单地将类的属性进⾏封装,还可以对⽅法进⾏封装。
说道这⾥,我就⼀直很奇怪为什么要封装,封装的好处是什么。
⾄于为什么需要封装,因为⾯向对象中所有的实体都是以对象为基本单位的,以宏观世界的实体来映射到计算机世界中,每个对象有它⾃⼰的属性和⾃⼰的⾏为,我们⽤类来将这些属性和⾏为封装到⼀起,当它实例化出来⼀个对象的时候,我们可以说这个对象具有这些属性和⾏为。
不同类别的对象正是因为这些特性的不同,我们才可以将它们区分开,⽽这也正反映了我们现实⽣活中不同种类个体的不同。
举个例⼦,⽐如现在有⼀个Int类型的数据a,它的初始值为0,通过这个变量可以表达出学⽣的考试成绩。
但是仅仅只能表达出学⽣的成绩为0分,不能表达出学⽣缺考的情况。
但是如果我们现在成绩的类型变为Integer ,那么就不⼀样了,现在有⼀个Integer类型的数据b,它的初始值为null,通过null和0我们就能区分出来学⽣是0分还是缺考的两种不同状态。
Java的四个特性Java的四种特性封装封装的概念在⾯向对象程序设计⽅法中,封装是指⼀种将抽象性函式接⼝的实现细节部分包装、隐藏起来的⽅法。
封装可以被认为是⼀个保护屏障,防⽌该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接⼝控制。
封装最主要的功能在于我们能修改⾃⼰的实现代码,⽽不⽤修改那些调⽤我们代码的程序⽚段。
适当的封装可以让程序更容易理解和维护,也加强了程序代码的安全性。
封装的优点良好的封装能减少耦合;类内部的结构可以⾃由修改;可以i对成员变量进⾏更精确的控制;隐藏信息,实现细节。
继承继承的概念继承是Java⾯向对象编程技术的⼀块基⽯,因为它允许创建分等级层次的类。
继承就是⼦类继承⽗类的特征和⾏为,使得⼦类对象(实例)具有⽗类的实例域和⽅法,或⼦类从⽗类继承⽅法,使得⼦类具有⽗类相同的⾏为。
继承符合的关系是:is-a,⽗类更通⽤,⼦类更具体。
⼦类会具有⽗类的⼀般特性也会具有⾃⾝的特性。
类的继承格式在Java中通过extends关键字可以申明⼀个类是从另⼀个类继承⽽来的,⼀般形式为:class ⽗类 {}class ⼦类 extends ⽗类 {}为什么要继承?在编程中可以将多个类的代码重复部分提取出来组成⼀个⽗类,其它类作为⼦类继承⽗类后,就具有了⽗类当中的属性和⽅法,⼦类就不会存在重复的代码,维护性也提⾼,代码也更简洁,提⾼代码的复⽤性。
继承类型注意:Java不⽀持多继承,但⽀持多重继承。
继承的特性⼦类拥有⽗类⾮私有的属性、⽅法;⼦类可拥有⾃⼰的属性和⽅法,即⼦类可以对⽗类进⾏扩展;⼦类可以⽤⾃⼰的⽅式实现⽗类的⽅法;Java的继承是单继承,但可以实现多重继承,单继承就是⼀个⼦类只能继承⼀个⽗类,多重继承就是,例如B类继承A类,C类继承B 类,所以按照关系就是B类是C类的⽗类,A类是B类的⽗类,这是Java继承区别于C++继承的⼀个特性;提⾼了类之间的耦合性(继承的缺点,耦合度⾼就会造成代码之间的联系越紧密,代码独⽴性越差)。
java的封装,继承和多态类和对象类类声明 { 成员变量的声明; 成员方法的声明及实现; }声明类:[修饰符] class 类<泛型> [extends 父类] [implements 接口列表]声明成员变量:[修饰符]数据类型 变量[=表达式]{,变量[=表达式]}成员方法声明:[修饰符]返回值类型 方法([形式参数列表])[throws 异常类列表]{语句序列;[return[返回值]]; }重载:一个类中可以有多个同名的成员方法,前提是参数列表不同,称为类的成员方法重载,重载的多个方法为一种功能提供多种实现。
重载方法之间必须以不同的参数列表(数据类型、参数个数、参数次序)来区别。
例如,MyDate 类可声明多个重载的set()方法如下: void set(int y,int m, int d)void set(int m, int d) //重载方法,参数个数不同void set(int d) void set(MyDate date)//重载方法,参数的数据类型不同对象对象声明:类 对象构造实例:对象 = new 类的构造方法([实际参数列表])引用对象的成员变量和调用成员方法:对象.成员变量 对象.成员方法([实际参数列表])类的封装性构造与析构类的构造方法用于创建类的一个实例并对实例的成员变量进行初始化一个类可声明多个构造方法对成员变量进行不同需求的初始化,构造方法不需要写返回值类型,因为它返回的就是该类的一个实例。
例:MyDate类声明以下构造方法:public MyDate(int year, int month, int day)// 声明构造方法,方法名同类名,初始化成员变量 {set(year, month day);// 调用 set()方法,为成员变量赋值}使用new运算符调用指定类的构造方法,实际参数列表必须符合构造方法声明。
例如:MyDate d1 = new MyDate(2017,10,1);//创建实例并初始化成员变量当一个类没有声明构造方法时,Java 自动为该类提供一个无参数的默认构造方法对象的引用与运算this引用访问本类的成员变量和成员方法:this.成员变量,this.成员方法([实际参数列表])调用本类重载的构造方法:this([实际参数列表])访问控制类的访问控制权限公有和(public)和缺省类中成员4级访问控制权限及范围声明set()和get()方法存取对象的属性例:public void set(int year, int month, int day) //设置日期值 public void set(MyDate date)//设置日期值,重载 public int getYear()//获得年份 public int getMonth()// 获得月份 public int getDay()//获得当月日期静态成员定义及访问格式使用关键字static声明的成员称为静态成员在类内部,可直接访问静态成员,省略类名。
继承多态封装的意义继承、多态和封装是面向对象编程中的三大特性。
它们是面向对象编程的核心,也是程序员必须掌握的基础知识。
在本文中,我们将重点讨论继承、多态和封装的意义以及它们在面向对象编程中的作用。
一、继承的意义继承是面向对象编程中的一种重要的机制,它允许一个类从另一个类中继承属性和方法。
继承的意义在于:1、减少重复代码继承可以减少代码的重复。
当多个类有相同的属性和方法时,我们可以把这些属性和方法放在一个父类中,子类可以继承这些属性和方法,从而避免了重复编写代码的麻烦。
2、提高代码的可维护性继承可以提高代码的可维护性。
当需要修改某个属性或方法时,只需要在父类中修改一次,所有继承自父类的子类都会自动更新。
3、增强代码的扩展性继承可以增强代码的扩展性。
当需要增加新的属性或方法时,只需要在父类中添加即可,所有继承自父类的子类都可以使用这些新的属性和方法。
二、多态的意义多态是面向对象编程中的一个重要概念,它允许不同的对象对同一消息做出不同的响应。
多态的意义在于:1、提高代码的灵活性多态可以提高代码的灵活性。
当需要处理一组不同的对象时,可以采用多态的方式,使得代码更加灵活。
2、增强代码的可扩展性多态可以增强代码的可扩展性。
当需要增加新的对象时,只需要实现相应的接口或继承相应的类即可,不需要修改原有的代码。
3、提高代码的可读性多态可以提高代码的可读性。
通过多态的方式,可以使代码更加简洁、清晰,易于理解。
三、封装的意义封装是面向对象编程中的一个重要概念,它可以将数据和方法隐藏在类的内部,仅对外部提供接口。
封装的意义在于:1、提高代码的安全性封装可以提高代码的安全性。
将数据和方法隐藏在类的内部,可以防止外部直接访问和修改数据,从而保证数据的安全性。
2、提高代码的可维护性封装可以提高代码的可维护性。
类的内部数据和方法只对外部提供接口,当需要修改数据或方法时,只需要修改接口而不需要修改调用接口的代码。
3、提高代码的可读性封装可以提高代码的可读性。
封装、继承、多态、抽象是java语言的四大特点,Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
java语言的热点1、封装:封装是面向对象编程的核心思想,将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。
采用封装的思想保证了类内部数据结构的完整性,应用该类的用户不能轻易地直接操作此数据结构,只能执行公开的数据。
这样避免了外部操作对内部数据的影响,提高了程序的可维护性。
2、继承:类与类之间同样具有关系,如一个百货公司与销售员类相互联系,类之间的这种关系被称为关联。
两个类之间的关系有很多种,继承是关联的一种。
继承就是指子类继承了父类的属性和行为。
例如鸽子类保留了鸟类的属性和行为,这样就节省了定义鸟和鸽子共同具有的属性和行为时间,这就是继承的基本思想。
3、多态:多态就是指同一种事物在不同的情况下的多种表现形式,多态其实就是将父类对象应用于子类的特征。
就图形类来说,每个图形都拥有自己的能力,这个能力可以看作是该类具有的行为,如果将子类的对象统一看作是父类的实例对象,当我们绘制图形时,简单的调用父类也就是图形类绘制图形的方法即可绘制任何图形,这就是多态的基本思想。
4、抽象:抽象是指不能某一类对象使用具体的语言进行描述。
例如对于图形对象不能使用具体的语言进行描述,它有几条边,它是什么图形,这种类通常被定义为抽象类。
抽象只对对象的行为和属性进行改变,不在乎方法的细节。
java的发展前景作为一种最火的网络编程语言之一,Java语言在当今信息化社会中发挥了重要的作用。
随着网络的迅速发展,Web应用日益广泛,Java语言也得到了快速的发展,权威统计机构统计,在所有软件开发类人才的需求中,对Java工程师的需求达到全部需求量的60%~70%,未来的就业前景非常好。
Java软件工程师一般月薪范围在6000-10000元,远远超过了应届毕业生月薪2500元的平均水平。
Java面向对象的三大特性Java面向对象的三大特性Java面向对象的三大特性分别为:封装、继承、多态,下面我们一起来详细了解一下!1.封装:说得通俗一点,就是把细节隐藏起来,把该公开的公开,把该私有的私有。
那如何封装一个类?类中含属性和方法,属性可有可无,并且应该设置为private.方法可有可无,对外的方法的应该公开,对内的方法应该私有.一个类的方法,大致有:构造方法 -> 可以生成存/取属性值的方法,也就是 getter/setter 属性方法. -> 可以生成业务方法,实现此类对象的真正业务功能,是程序员真正需要花心思考虑的。
针对类中的方法,有以下两种封装策略:1).把存/取属性方法、构造方法、业务方法全部封装到同个类中。
2).把业务方法单独独立出来,形成一个业务类,这个类用来操作与它所相关的实体对象。
它一般由接口与实现类组成.实体(Entity)对象,就是指含业务属性和属性存/取方法的对象.如:封装策略一:public class Account {private long id;private String name;private double balance;private String pwd;....// getter/setter方法// 构造方法....// 业务方法public void withdraw(double money) {if(balance < money) {System.out.println("余额不足");return ;}balance -= money;}public void deposit(double money) { }}//采用封装策略二:首先是实体类public class Account {private long id;private String name;private double balance;private String pwd;....// getter/setter方法// 构造方法}//再定义一个业务类,操作Accountpublic class AccountService {// 业务方法public void withdraw(Account a,double money) { if(a.getBalance() < money) {System.out.println("余额不足");return ;}a.setBalance(a.getBalance - money);}public void deposit(Account a, double money) { }}注:此处在真实的场景中应该由接口与实现类组成。
在Java中,继承是一个面向对象编程(OOP)的基本概念,它是面向对象三大特性(封装、继承、多态)之一。
继承背后的思想是基于已存在的类来构建新的类,从而实现代码的重用、模块化设计以及不同抽象层次的体现。
继承的作用主要体现在以下几个方面:
1. 代码重用:通过继承,子类可以重用父类的属性和方法,避免重复编写相同的代码,提高代码的可重用性。
2. 模块化设计:继承有助于实现模块化设计,将相关功能组织在一起,便于维护和扩展。
3. 实现多态:继承为实现多态提供了基础。
通过重写父类的方法,子类可以根据需要实现不同的功能,从而实现多态。
4. 代码简洁:继承可以简化代码结构,将复杂的功能拆分为多个模块,使代码更简洁、易读。
在Java中,继承是通过`extends`关键字来实现的。
一个类只能有一个直接父类,但可以继承多个接口。
继承的关系遵循"is-a"原则,即子类是父类的一种特殊情况。
继承在Java编程中具有重要作用,它不仅可以提高代码的可重用性,还可以实现模块化设计和多态,使代码更简洁、易读。
为什么要继承、封装和多态
1,为什么要继承
继承的好处是代码重用.哲学上讲事物都是有共性和特性的.把共性函数代码放入到父类中,把特性函数代码放入到子类中,当然是否共性要以参照点的标准.OO中所谓的抽象我自己理解为哲学中的共性在同一个行业中,他们各业务流程往往有很大的相似性,但往往我们都是到一个项目中就重新写一套流程代码,或者粘贴以前的代码.可能有很多代码都是以前写过的重复代码.造成重复劳动.如果采用继承应该这样,首先在父类中做一个基本上大部分行业项目都必要的简洁的主流程.在子类中针对具体项目的特殊性做主流程充分的完善的补充.这样在每个项目中,只针对项目的特殊性编写代码,大大降低重复劳动.当然根据具体流程的复杂多可以划分多的继承层次,呈现一种继承的树结构,但一定的要保证层次一定要有实际的意义.
2,为什么要封装
高内聚低偶合的思想简单的理解同一模块内的提高内聚,不同模块降低偶合.如果说一个类代表一个模块或是一个业务流,那么A类内部要提高内聚,类的属性可以看成是内的局部变量.提高数据的重用.公共函数尽量能被其他主函数,尽量达到功能内聚.如果说是A类和B类,并且是不同模块(也许是同一个模块下的两个子模块),那么B 是不能使用A的函数和属性的,紧进行数据偶合.封装的作用就体现在这里.
再现实中就项目中经常遇到这种情况,某项业务增加或修改一种类型的业务流,自己本身调试成功了,但是缺影响了此业务下其他的业务流,不得不测试所有得其他原本正常的业务流并不得不针对此做类型判断的补丁,这种补丁很肯能导致程序结构的不合理.
3.为什么要多态
个人认为多态的好处体现在代码的可扩充性,比如一个业务有多个业务流,为了区别不同的类型就的使用判断,那么新添加一个流程就得在过程执行主流程(往往是final,必然是面向过程的)中添加一个”if then”或是重载一个函数
在目前项目中mvc得控制器就是典型的多态.想想如果我们不使用多态那么怎么办?因为对PO对象是新添加的,那么必须针对新的PO 对象在代码中做IF判断,才能用他本身的对象类型指向他.造成过程执行主流程不断的要变更自己的代码.
总结:
OO中继承和多态互相依赖又互相矛盾,没有继承就不可能有多态,多态的使用往往又在面向过程的代码中.继承是使子类可以使用父类的功能,而多态使父类能使用子类的功能.
OO并非只是在编码阶段来处理,实际上在概要设计,详细设计,数据库设计的时候就应该OO的思想来设计.提高软件可重用性和可扩充性.对于想对一个行业做标准化产品软件而言,很重要.。