Java 面向对象详解
引言
接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学过的基础知识的想法。
面向对象
面向对象(Object Oriented)是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、多态等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。
对象
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。
类的实例化可生成对象,一个对象的生命周期包括三个阶段:生成、使用、消除。
当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。当系统内存用尽或调用System.gc( )要求垃圾回收时,垃圾回收线程与系统同步运行。
类
类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性和方法两个主要部分。
Java中的类实现包括两个部分:类声明和类体。
抽象类和接口的区别?
- 抽象类中可以没有抽象方法;接口中的方法必须是抽象方法;
- 抽象类中可以有普通的成员变量;接口中的变量必须是 static final 类型的,必须被初始化,接口中只有常量,没有变量。
- 抽象类只能单继承,接口可以继承多个父接口;
- Java 8 中接口中会有 default 方法,即方法可以被实现。
基本特性
继承
Java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。
多态
对象的多态性是指在父类中定义的属性或方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为。
Java的多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。
重载(Overloading)
- 方法重载是让类以统一的方式处理不同数据类型的手段。
- 一个类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。
- 返回值类型可以相同也可以不相同,无法以返回型别作为重载函数的区分标准。
- 重载的条件:方法类型不同、个数不同、顺序不同
重写(Overriding)
- 子类对父类的方法进行重新编写。如果在子类中的方法与其父类有相同的的方法名、返回类型和参数表,我们说该方法被重写 (Overriding)。
- 如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
- 子类函数的访问修饰权限不能低于父类的。
封装
封装性就是尽可能的隐藏对象内部细节,对外形成一道边界,只保留有限的接口和方法与外界进行交互。封装的原则是使对象以外的部分不能随意的访问和操作对象的内部属性,从而避免了外界对对象内部属性的破坏。
修饰符
static 修饰符
静态变量:可以被多个实例共享
实际上类的成员变量可分为两种:静态变量,是指被static修饰的成员变量;实例变量,是指没有被static修饰的成员变量;
静态变量和实例变量的区别:
1. 静态变量,在java运行时,只分配一次内存,在类的内部,任何方法都可以直接访问;
2. 实例变量,每创建一个实例,java都会分配一次内存,在非静态类中,可以直接访问;在本类静态方法中则需要通过类的实例对象进行访问;
静态方法
实际上类的成员方法可分为两种:静态方法和实例方法;对应区别与变量一致。
静态代码块
静态代码块指Java类中的static{}代码块,主要用于初始化,为类的静态变量赋初始值。
final 修饰符
final 修饰的属性:表示该属性一旦被初始化便不可改变。
final 修饰的方法:表示该方法不允许重写,且该方法只被实现一次。
final 修饰的类:表示该类无法被任何其他类继承。