Java面向对象的概念及三大特性

Java面向对象

面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统开发方式模型的研究。

在 Java 语言中,一切皆是对象,Java把现实世界中的实体以对象的形式抽象地体现在编程世界中,一个对象代表了某个具体的实体,对象的属性代表了这个实体的特征,对象的方法代表了这个实体的能力。

面向对象的概念

Java 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。对象有以下特点:

  1. 对象都是某个类别的实例。
  2. 对象具有唯一性。
  3. 真实世界中的所有事物都可以视为对象。
  4. 对象具有变化的状态。
  5. 对象具有属性和行为。

面向对象与面向过程

  • 面向过程代码松散,强调流程化解决问题。
  • 面向对象代码强调高内聚、低耦合,先抽象模型定义共性行为,再解决实际问题。

面向对象的三大核心特性

面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率。面向对象程序设计有以下优点:

  1. 可重用性:代码重复使用,减少代码量,提高开发效率。
  2. 可扩展性:指新的功能可以很容易地加入到系统中来,便于软件的修改。
  3. 可管理性:能够将功能与数据结合,方便管理。

面向对象的设计思想之所以使程序设计更加完善和强大,主要是因为面向对象具有继承、封装和多态 3 个核心特性。

封装

封装是对象功能内聚的表现形式,在抽象基础上决定信息是否公开及公开等级,核心问题是以什么方式暴漏哪些信息。主要任务是对属性、数据、敏感行为实现隐藏,对属性的访问和修改必须通过公共接口实现。封装使对象关系变得简单,降低了代码耦合度,方便维护。

迪米特原则就是对封装的要求,即 A 模块使用 B 模块的某接口行为,对 B 模块中除此行为外的其他信息知道得应尽可能少。不直接对 public 属性进行读取和修改而使用 getter/setter 方法是因为假设想在修改属性时进行权限控制、日志记录等操作,在直接访问属性的情况下无法实现。

优点总结

  1. 保护类中的信息,它可以阻止在外部定义的代码随意访问内部代码和数据。
  2. 隐藏方法实现的细节信息,只需要知道它是做什么的,不需要知道它具体是怎么实现的。
  3. 有助于建立各个系统之间的松耦合关系,提高系统的独立性。
  4. 提高软件的复用率,降低成本。

继承

继承用来扩展一个类,子类可继承父类的部分属性和行为使模块具有复用性,这是类之间的一种关系。Java 只支持单继承。。

继承是"is-a"关系,可使用里氏替换原则判断是否满足"is-a"关系,即任何父类出现的地方子类都可以出现。如果父类引用直接使用子类引用来代替且可以正确编译并执行,输出结果符合子类场景预期,那么说明两个类符合里氏替换原则。

多态

多态以封装和继承为基础,根据运行时对象实际类型使同一行为具有不同表现形式。多态指在编译层面无法确定最终调用的方法体,在运行期由 JVM 动态绑定,调用合适的重写方法。由于重载属于静态绑定,本质上重载结果是完全不同的方法,因此多态一般专指重写。

重载和重写

重载指方法名称相同,但参数类型个数不同,是行为水平方向不同实现。对编译器来说,方法名称和参数列表组成了一个唯一键,称为方法签名,JVM 通过方法签名决定调用哪种重载方法。不管继承关系如何复杂,重载在编译时可以根据规则知道调用哪种目标方法,因此属于静态绑定。

JVM 在重载方法中选择合适方法的顺序
① 精确匹配。② 基本数据类型自动转换成更大表示范围。③自动拆箱与装箱。④ 子类向上转型。⑤ 可变参数。

重写指子类实现接口或继承父类时,保持方法签名完全相同,实现不同方法体,是行为垂直方向不同实现。

元空间有一个方法表保存方法信息,如果子类重写了父类的方法,则方法表中的方法引用会指向子类实现。父类引用执行子类方法时无法调用子类存在而父类不存在的方法。

重写方法访问权限不能变小,返回类型和抛出的异常类型不能变大,必须加 @Override 。

类之间的关系

类关系描述权力强侧举例
继承父子类之间的关系:is-a父类小狗继承于动物
实现接口和实现类之间的关系:cando接口小狗实现了狗叫接口
组合比聚合更强的关系:contains-a整体头是身体的一部分
聚合暂时组装的关系:has-a组装方小狗和绳子是暂时的聚合关系
依赖一个类用到另一个:depends-a被依赖方人养小狗,人依赖于小狗
关联平等的使用关系:links-a平等人使用卡消费,卡可以提取人的信息

参考:
http://c.biancheng.net/view/939.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java面向对象程序设计期末考试试题及答案 1. 请简要说明面向对象程序设计的三大特征。 答案:封装、继承和多态面向对象程序设计的三大特征。封装指的是将数据和操作数据的方法封装在一起,可以通过访问权限控制提高安全;继承指的是子类可以继承父类的属和方法,便于代码重用;多态指的是同一个方法名可以有多种不同的实现方式,实现了代码的灵活和扩展。 2. 请使用Java语言编写一个简单的类,并在主函数实例化这个类。 答案:代码如下 ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public static void main(String[] args) { Person person = new Person("Tom", 25); System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); } } ``` 3. 请简要说明抽象类和接口的区别。 答案:抽象类是一种包含抽象方法的类,不能被实例化,只能被继承;接口是一种只包含抽象方法和常量的类,实现接口的类必须实现接口定义的所有方法。一个类可以实现多个接口,但只能继承一个抽象类。 4. 请使用多态概念简要说明方法重写和方法重载的区别。 答案:方法重写是子类重新定义了父类的方法,实现了多态,调用父类引用指向子类对象时将调用子类的方法;方法重载是在一个类可以定义多个方法名相同但参数列表不同的方法,通过参数的类型、个数和顺序来区分调用不同的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值