Java面向对象编程笔记(二)

80 阅读5分钟

构造方法

创建实例的时候,我们经常需要同时初始化这个实例的字段,可以通过构造方法,创建实例的时候,实际上是通过构造方法来初始化实例的

class 类名 {
  类名(形参列表) {
   构造方法体;
  }
}

构造方法名与类名完全相同并且没有返回值类型,连void都不许有。

  • 当一个类中没有定义任何构造方法时,编译器会自动添加一个无参空构 造构造方法,叫做默认/缺省构造方法
  • 若类中出现了构造方法,则编译器不再提供任何形式的构造方法。 

方法重载

若方法名称相同,参数列表不同,这样的方法之间构成重载关系。

  • 参数的个数不同、参数的类型不同、参数 的顺序不同,与返回值类型和形参变量名无关,但建议返回值类型最好相同。
  • 调用方法时能否加以区分。 

方法重载的实际意义在于调用者只需要记住一个方法名就可以调用各种 不同的版本,来实现各种不同的功能。

this

  • 若在构造方法中出现了this关键字,则代表当前正在构造的对象。
  • 若在成员方法中出现了this关键字,则代表当前正在调用的对象。
  • this关键字本质上就是当前类类型的引用变量。

封装

对成员变量进行密封包装处理,来隐 藏成员变量的细节以及保证成员变量数值的合理性,该机制就叫做封装。

封装的实现流程

  • 私有化成员变量,使用private关键字修饰。
  • 提供公有的get和set方法,并在方法体中进行合理值的判断。
  • 在构造方法中调用set方法进行合理值的判断。 

static关键字

使用static关键字修饰成员变量表示静态的含义,此时成员变量由对象层 级提升为类层级,也就是整个类只有一份并被所有对象共享,该成员变 量随着类的加载准备就绪,与是否创建对象无关。

static关键字修饰的成员可以使用引用.的方式访问,但推荐类名.的方式。

  • 在非静态成员方法中既能访问非静态的成员又能访问静态的成员。 (成员:成员变量 + 成员方法, 静态成员被所有对象共享)
  • 在静态成员方法中只能访问静态成员不能访问非静态成员。 (成员:成员变量 + 成员方法, 因为此时可能还没有创建对象)
  • 在以后的开发中只有隶属于类层级并被所有对象共享的内容才可以使用 static关键字修饰。(不能滥用static关键字)

单例设计模式

一个类对外提供且只提供一个对象时,这样的类叫 做单例类,而设计单例的流程和思想叫做单例设计模式。 

  • 私有化构造方法,使用private关键字修饰。
  • 声明本类类型的引用指向本类类型的对象,并使用private static关键字共同修饰。
  • 提供公有的get方法负责将对象返回出去,并使用public static关键字共同修饰。

继承

当多个类之间有相同的特征和行为时,可以将相同的内容提取出来组成 一个公共类,让多个类吸收公共类中已有特征和行为而在多个类型只需 要编写自己独有特征和行为的机制,叫做继承。

在Java语言中使用extends(扩展)关键字来表示继承关系。

使用继承提高了代码的复用性,可维护性及扩展性,是多态的前提条件。 

继承的特点

  • 子类不能继承父类的构造方法和私有方法,但私有成员变量可以被继承 只是不能直接访问。
  • 无论使用何种方式构造子类的对象时都会自动调用父类的无参构造方法, 来初始化从父类中继承的成员变量,相当于在构造方法的第一行增加代码super()的效果。 
  • 使用继承必须满足逻辑关系:子类 is a 父类,也就是不能滥用继承。
  • Java语言中只支持单继承不支持多继承,也就是说一个子类只能有一个父类,但一个父类可以有多个子类。 

方法重写

从父类中继承下来的方法不满足子类的需求时,就需要在子类中重新写 一个和父类一样的方法来覆盖从父类中继承下来的版本,该方式就叫做 方法的重写

  • 要求方法名相同、参数列表相同以及返回值类型相同,从Java5开始允许 返回子类类型。
  • 要求方法的访问权限不能变小,可以相同或者变大。
  • 要求方法不能抛出更大的异常(异常机制)。 

访问控制 

  • public修饰的成员可以在任意位置使用。
  • private修饰的成员只能在本类内部使用。
  • 通常情况下,成员方法都使用public关键字修饰,成员变量都使用private 关键字修饰。 

package

  • 定义类时需要指定类的名称,但如果仅仅将类名作为类的唯一标识,则 不可避免的出现命名冲突的问题。这会给组件复用以及团队间的合作造 成很大的麻烦!
  • 在Java语言中,用包(package)的概念来解决命名冲突的问题。 

在定义一个类时,除了定义类的名称一般还要指定一个包名,格式如下: package 包名; package 包名1.包名2.包名3...包名n; 

为了实现项目管理、解决命名冲突以及权限控制的效果。 

使用import关键字导入包。

final关键字

final本意为"最终的、不可改变的",可以修饰类、成员方法以及成员变量。 

  • final关键字修饰类体现在该类不能被继承。
  • final关键字修饰成员方法体现在该方法不能被重写但可以被继承。
  • final关键字修饰成员变量体现在该变量必须初始化且不能改变。