总结

面向对象的基本特征

  • 封装
    • 把对象的属性和行为封装在一起, 形成一个不可分割的实体, 只保留有限的对外接口.
    • 在编程上, 将属性与方法定义在一个类中, 并对来自类外部的访问进行控制.
  • 继承
    • 继承是描述事物间的一般与特殊关系.
    • 特殊类从一般类继承属性与行为, 称一般类为父类(或超类, superclass), 特殊类为子类(或派生类, subclass).
    • 子类继承父类的属性和行为, 同时具有自己独特的属性与行为.
  • 多态
    • 一个类中有多个操作具有相同的名字, 但这些操作所接收的输入参数各不相同, 称为方法重载
    • 指父类的方法被不同的子类继承后表现出不同的行为

类的定义

1
2
3
4
5
6
7
8
9
[修饰符] class <类名> {
<类体>
}

// EG:

public class test {
...
}
  • class是定义类的关键字, 后面跟着类名.
  • 一对花括号及其包含内容称作类体.
  • 中括号内的修饰符是可选项, public就是一个修饰符

类体的构成

  • 成员变量: 定义在类体中的变量, 表示对象的属性.
  • 成员方法: 定义在类体中的函数, 表示对象的行为.

只能在方法体中操作变量

1
2
3
4
5
6
7
8
class A{
int a = 9; // 正确
int b;
b = 10; // 错误
void add(){
b = 10; // 正确
}
}
1
2
3
4
5
6
7
8
[修饰符] <返回值类型> <方法名>([参数列表]){
<方法体>
}

// EG:
public int add(int a, int b){
return a + b;
}
  • 一对花括号’{}'括起来的部分称为方法体.
  • 除了抽象方法外, 其他所有方法必须有方法体.
  • 如果方法的返回值类型是void, 则方法中可以没有任何语句.
  • 方法体中包括变量声明和语句.
  • 在方法体内部声明的变量和方法的形参都是局部变量.
  • 形参的作用域(变量有效的区域)是整个方法体内部
  • 局部变量的作用域是从定义位置开始到方法结束
  • 如果局部变量定义在代码块(用花括号括起来的区域)中, 则是从定义位置开始到代码块结束.
  • 方法被调用时局部变量才会被创建, 方法执行完毕局部变量就会被撤销.
  • 局部变量在使用前必须赋初值, 可以在定义时赋初值, 也可以在使用前赋一次初值.

构造方法

  • 构造方法的名字与它所属类的名字相同, 没有返回值类型.
  • 在创建一个类的对象时, JVM会自动调用该类的构造方法.
  • 允许有多个构造方法, 但是这些构造方法的参数列表必须不同.

对象的创建与使用

对象必须先创建然后才能使用

对象的创建

step 1.
声明对象变量: 类名 变量名

step 2.
创建对象: new 类名(参数列表) 然后赋值给对象, 此处参数列表是构造方法的输入参数.

  • 如果一个类没有定义构造方法, 系统会为这个类添加默认的构造方法, 否则不会为该类添加默认的构造方法.
  • 默认的构造方法是无参数的空方法
  • 当一个类有多个构造方法时, 创建对象时所使用的参数列表与哪个构造方法的参数列表相匹配, 就调用哪个构造方法

对象的使用

一个对象完成创建之后, 就可以访问该对象的成员变量和成员方法.

  • 访问对象的成员变量: 对象名.变量名
  • 访问对象的成员方法: 对象名.方法名(实参列表)

对象的引用

new 操作符创建对象完成

  • 为对象分配存储空间

  • 调用构造方法

  • 返回对象的引用

  • 创建对象成功后, 返回一个对象的引用, 而不是对象自身.

  • 一个引用的值是一个16进制的整数, 代表一个对象, 具有唯一性.

  • 把某个对象的引用赋值给一个变量, 就称该变量引用了这个对象, 可以通过该变量来访问这个对象.

对象数组

1
2
// Student类型的对象数组
Student [] stu = new Student[10];

类变量和实例变量

成员变量分为: 类变量实例变量

  • 用关键字static修饰的成员变量称作类变量(也称作静态变量)
  • 没有使用static修饰的成员变量称作实例变量
1
2
3
4
class A{
int a; // 实例变量
static int b; // 类变量
}
  • 实例变量从属于对象, 必须通过对象访问.
  • 类变量从属于类, 即使没有创建对象依旧存在.一个类的某个类变量只有一份, 被该类的所有对象所共享.
  • 类变量可以通过对象访问, 也可以通过类名访问

类方法和实例方法

成员方法分为: 类方法实例方法

  • 使用关键字static修饰的成员方法称作类方法(也称作静态方法)
  • 没有使用static修饰的成员方法称作实例方法
1
2
3
4
5
6
7
8
9
10
class A{
// 实例方法
int add(int a, int b){
return a + b;
}
// 类方法
static int mult(int a, int b){
return a * b;
}
}
  • 实例方法必须通过对象访问

  • 类方法可以通过对象访问, 也可以通过类名访问

  • 在一个类的实例方法内部可以访问该类的实例方法和类方法以及实例变量和类变量

  • 类方法内部只能访问类方法和类变量, 不能访问实例方法和实例变量

final常量

final常量一旦给定就不能再改变

  • final可以修饰类变量、实例变量、局部变量
  • final修饰的类变量也称作类常量, 必须在声明的同时赋初值.
  • final修饰的实例变量可以在声明的时候赋初值, 也可以在构造方法中赋初值, 不能在其他地方赋初值.
  • final修饰的局部变量可以在声明的时候赋初值, 也可以在使用前赋一次初值
  • final修饰符可以和其他修饰符的位置进行改变

关键字this

this表示当前对象, 他的值是当前对象的引用, 他的类型是当前对象的类型.
this关键字只能用于实例方法和构造方法中, 不能用于类方法中.

  • this关键字可以出现在构造方法中, 表示该构造方法要初始化的那个对象
  • 构造方法中, 可以通过this关键字访问对象的成员变量(类变量或实例变量)、成员方法(类方法或实例方法)、以及其它构造方法.
  • 在一个类的构造方法中可以通过this关键字调用该类的其它造方法, 表示在执行该构造方法时, 先执行其它构造方法.此时该语句必须是第一条语句, 而且只能出现一次.这种情况不能省略this关键字.
1
2
3
4
5
6
7
8
9
10
11
class A{
String name;
int age;
A(String name){
this.name = name;
}
A(String name, int age){
this(name); // 先执行构造方法 A(String name), 再执行当前构造方法.
this.age = age;
}
}

成员的访问权限

访问权限是指在一个类的内部是否可以访问另一个类的成员变量或成员方法.
在一个类的内部访问自己的成员变量和成员方法与访问权限无关.
可以使用public、private、protected、缺省等关键字限定成员变量和成员方法的访问权限.

private

  • 用关键字private修饰的成员变量和成员方法称为私有的成员变量和私有的成员方法
  • 一个类的私有的成员变量和方法, 只有本类才能访问

public

  • 用public修饰的成员变量和成员方法称为公有的成员变量和成员方法.
  • 公有的成员访问不受限制, 在任何类的内部都能访问其它类的公 有成员.

友好的成员变量和成员方法

  • 没有用private、public、protected等关键字修饰的成员变量和成员方法称为友好的成员变量和友好的成员方法.
  • 定义在同一个包中的类可以互相访问对方的友好成员, 不是定义在同一个包中的类不能访问对方的友好成员.

受保护的成员变量和成员方法

  • 用protected修饰的成员变量和成员方法称为受保护的成员变量和成员方法
  • 定义在同一个包中的类能够互相访问对方受保护的成员
  • protected成员还具有继承访问权限

类的权限

public类和友好类

  • 用public修饰符的类称为public类
  • 不用public修饰符的类称为友好类
  • public类可以被所有类访问
  • 友好类只能被同一个包中的类访问

构造方法的权限

  • private、public 、protected、缺省等访问权限同样适用于构造方法, 和普通方法的访问权限规则相同
  • public类的默认构造方法是public权限的, 友好类的默认构造方法是友好权限的

方法重载

  • 方法重载是指一个类的多个方法具有相同的名字, 但这些方法的参数列表不同: 参数的个数或参数的类型不同
  • 方法的返回值类型和参数的名字不参与比较, 与重载无关
  • 方法重载是多态的一种

基本数据对象的封装

基本类型 byte int short long float double char boolean
封装类 Byte Integer Short Long Float Double Character Boolean

自动装箱 与 自动拆箱

自动装箱: 基本类型转成封装类型
自动拆箱: 封装类型转成基本类型