Java OOP基础总结

OOP

面向对象编程:把对象作为程序的基本单元,对象包括了数据和操作数据的函数,计算机程序视为一组对象的集合,每个对象可接受处理其他对象的消息,所以编程时对特定问题定义对应的对象。每个对象都拥有其类型,即class,它实际上是根据问题定义的一种数据类型,就像float类型(内置类型)的数字有相同的特性和行为。
面向过程编程:把计算机程序视为一组函数的顺序执行,为简化程序,把函数切分为子函数


对象

何为有用的对象

即可以完成各种任务,比如打开开关、屏幕画图等,这些任务由对对象的请求引起,这些请求定义为对象的接口,接口确定了对某一对象可发出的请求,每个请求都有一个方法与之相关联,当向对象发送请求时,方法就被调用。

如 class MyClass,接口中有Function()请求

MyClass Realize=new MyClass();//定义MyClass对象的引用Realize,然后调用new方法创建MyClass类型的新对象

Realize.Function();//向对象发送Function()消息

对象应具有的特性:高内聚——即一个软件构件(对象、方法)各个方面组合的很好,即功能分类明确有效

访问控制

作用:

  1. 隐藏部分内容,让客户端程序员无法触及
  2. 允许改变类内部工作方式而不影响到客户端程序员

访问控制指定词:
3. Public:任何人可用
4. private:仅类创建者及内部方法可用
5. protected:与private同,多了继承的类可访问
6. Java默认访问权限:未指定访问控制指定词时,默认包访问权限,即可访问同一个包中其余类成员,在包之外如同指定private


代码复用

复用实现方法

  1. 组合:将类的对象置于某个新类——创建成员对象,新的成员对象常被声明为private,实现了访问控制,即新类的客户端程序员不可访问它们;运行时修改成员对象,实现动态修改程序
  2. 继承:覆盖基类方法/添加新方法

多态

C++中用virtual实现多态,Java中动态绑定默认

非面向对象编程的编译器产生的函数调用会引起前期绑定——编译器产生对具体函数名字的调用,运行时将调用解析到将要被执行的代码的绝对地址

面向对象编程后期绑定——被调用的代码直至运行时才确定,编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查(无法提供检查保证的语言是弱类型的),但不知将被执行的确切代码

Java中的实现:用一小段特殊代码代替绝对地址的调用,它使用在对象中存储的信息来计算方法体的地址,实现不同对象指向不同的地址,进而有不同的行为表现

实现条件

  1. 继承:有存在继承关系的子类与父类
  2. 重写:子类对父类中的某些方法进行了重定义,之后调用时调用的是子类的方法
  3. 向上转型:要将子类的引用赋给父类的对象

作用:因为程序中定义的引用变量所指向的具体类的对象在运行时才可确定,所以可实现让程序选择多个运行状态。

如:父类family,子类father,mother,brother

family a=new father();

指向子类的父类引用,father可以自动向上转型为family——向上转型,会导致存在于子类中的方法和属性无法调用。但重写的方法,可以调用,即a可调用father中重写的方法,此时称为动态连接/动态调用


对象的创建和生命期

对象的存储分为两种

  1. 静态存储区:如堆栈,特点对象的存储空间和生命周期在编写程序时确定,执行速度快,但牺牲了灵活性,因为必须在编写时知道对象的确切数量,生命周期和类型

  2. 堆:动态创建对象,运行时才知对象数量,生命周期及类型,增加了灵活性,但执行时间长,因为存储空间是运行时动态管理的,所以需要大量的时间在堆中分配存储空间

Java采用动态内存分配方式,每次创建新对象时,用new构建对象的动态实例;Java的垃圾回收机制,使得对象占用的内存可自动释放,避免了内存泄漏问题。

技术学习中,欢迎大家批评指正
码字不易,转载请注明来处

猜你喜欢

转载自blog.csdn.net/ann1996/article/details/87987808