第5章 面向对象(上)

来源:互联网 发布:php面向对象思想 编辑:程序博客网 时间:2024/06/15 08:21

1.类和对象

  • 类定义
    1. 定义类class
[修饰符] class 类名{    零到多个构造器定义...    零到多个成员变量定义...    零到多个方法定义...}// 修饰符可包括:public,final,abstract,或完全省略这三个修饰符final和abstract 不能同时出现类被public修饰,该外部类可被所有类使用;类若不使用访问控制符,则该类只能被同一包中的类使用(创建对象)。
  1. 定义成员变量field
[修饰符] 类型 成员变量名 [= 默认值];// 修饰符可以省略,也可以是public,protected,private,static,final,其中public,protected,private三个最多只能出现其中之一,可以与static,final组合起来修饰成员变量。// 类型:可以是Java允许的任何数据类型
  1. 定义方法method
[修饰符] 方法返回值类型 方法名(形参列表){    // 由零到多条可执行性语句组成的方法体}// 修饰符可以省略,也可以是public,protected,private,static,final,abstract,其中public,protected,private三个最多只能出现其中之一;abstractfinal最多只能出现其中之一,可以与static组合起来修饰方法。abstractstatic不能同时修饰某个方法(static表示方法属于类本身,但如果被修饰成abstract,该方法将没有方法体,所以通过类调用该方法会出现错误)// 方法返回类型:Java允许的任何数据类型//staticabstract并不是完全互斥的,虽然不能同时修饰方法,但可以同时修饰内部类。
  1. 定义构造器constructor
[修饰符] 构造器名(形参列表){    // 由零条到多条可执行性语句组成的构造器执行体}// 修饰符:可省略,也可以是public,protected,private其中之一// 构造器名:与类名相同
  1. static用法
static修饰的成员变量:叫做类变量或静态变量被static修改时的方法:叫做类方法或静态方法
  • 对象的产生和使用
  • 对象、引用和指针
  • 对象的this引用

this作为对象的默认引用有两种情形(构造器中引用该构造器正在初始化的对象;在方法中引用调用该方法的对象)。this关键字总是指向调用该方法的对象。

2.方法详解

  • 方法的所属性
  • 方法的参数传递机制

Java里参数传递方式只有一种:值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到影响。

  • 形参个数可变的方法

个数可变的形参只能处于形参列表的最后。一个方法中最多只能包含一个个数可变的形参。个数可变的形参本质就是一个数组类型的形参,因此调用包含个数可变形参的方法时,该个数可变的形参既可以传入多个参数,也可以传入一个数组。

  • 递归方法

一个方法体内调用它本身,被称为方法递归。递归应该是有方向,并且某时刻的返回值是确定的。

  • 方法重载

3.成员变量和局部变量

  • 成员变量和局部变量

成员变量:默认初始化时的赋值规则与数组一致

局部变量(形参,方法局部变量,代码块局部变量):除形参外都必须显示的初始化后才可以使用。

  • 成员变量的初始化和内存中的运行机制
  • 局部变量的初始化和内存中的运行机制

局部变量不属于任何类或实例,因此它总是保存在其所在方法的栈内存中。栈内存的变量无须系统垃圾回收,往往随方法或代码块的结束而结束。

  • 变量的使用规则

4.隐藏和封装

  • 理解封装

它指的是将对象的信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类提供的方法来实现对内部信息的操作和访问。

  • 使用访问控制符

private(当前类访问权限)
default(包访问权限)
protected(子类访问权限)
public(公共访问权限)

基本规则:

  1. 类里的绝大部分成员变量用private修饰,只有一些static修饰的、类似全局变量的成员变量,才可能考虑用public修饰
  2. 如果某类主要用作其他类的父类,使用protected修饰
  3. 构造器、外部类通常用public修饰

    • package、import和import static

import :引入包下的所有类或引入包中的单个类
import static:引入某包某类的单个静态成员变量或静态方法,引入某包某类中的所有静态成员变量和方法。

  • Java常用包

5.深入构造器

  • 使用构造器执行初始化
  • 构造器重载

当需要在构造器中调用另一个构造器时,可以用this(参数列表)的形式调用。

6.类的继承

  • 继承的特点
  • 重写父类的方法
  • super限定
  • 调用父类构造器

因为super和this都必须出现在构造器执行体的第一行,所以super和this不能同时出现。

不管是否使用super调用来执行父类构造器的初始化代码,子类构造器总会调用父类构造器一次。(若自定义父类构造器,那么在子类中必须显示的调用)

子类的构造器执行体中既没有super调用也没有this调用,则系统会隐式调用父类的无参构造器。

7.多态

  • 多态性

编译时类型与运行时类型不一致;Java允许把子类对象直接赋给父类引用变量(或者被称为向上转型,由系统自动完成),当运行时调用该引用变量的方法时,其方法行为总是变现为子类方法的行为特征,而不是父类方法的行为特征,这就是多态;多态是指方法的多态,而对象的实例变量不具有多态性;引用变量在编译阶段只能调用其编译时类型所具有的方法。
* 引用变量的强制类型转换

如果需要让引用变量调用它运行时类型的方法,则必须把它强制转换成运行时类型;引用类型之间的转换只能在具有继承关系的两个类型之间进行;如果试图把一个父类的实例转换成子类类型,则这个对象必须实际上式子类实例才行。

  • instanceof运算符

instanceof运算符的前一个操作数是引用类型变量,后一个操作数是类或接口,用于判断前面的对象是否是后面的,或者其子类、实现类的实例。

注意:instanceof运算符前面操作数的编译时类型要么与后面的类相同,要么与后面的类具有父子继承关系,否则会引起编译错误。

8.继承与组合

  • 使用继承的注意点
  • 利用组合实现复用

9.初始化块

  • 使用初始化块

初始化块只能用static(静态初始化块)或省略修饰(普通初始化块)
普通初始化块、声明实例变量指定的默认值都可以认为是对象的初始化代码,它们的执行顺序与源程序的排列顺序相同;实例变量初始化顺序是:先执行初始化块或声明实例变量指定的初始值,在执行构造器中指定的初始值。

  • 初始化块和构造器

初始化块是对构造器的补充;

  • 静态初始化块

类相关,所以在类初始化阶段执行,而不是创建对象阶段执行,所以比普通初始化块先执行。静态初始化块不能对实例变量进行初始化处理。

初始化的阶段:分为两个阶段:类初始化阶段,先执行顶层父类的静态初始化块依次向下;对象初始化阶段,先执行顶层父类的普通初始化块、构造器,依次向下。

10.本章小结

拓展

不同的修饰符 作用范围

1 0
原创粉丝点击