面向对象的三条主线:
1.类及类的成分
2.面向对象的三大特性
3.其他的关键字: this super import package abstract static final interface等

一.专注类的设计

类从代码的角度: 并列关系! 从执行、设计的角度: 关联关系、继承关系、聚合关系

1.类的成分

属性 方法 构造器 代码块 内部类

  1. 属性:

  • ①变量的分类: 成员变量(属性 Field) vs 局部变量(方法的形参、方法内部、代码块内部)
    基本数据类型(8种, 不同的数据类型对应不同的默认初始化值) vs 引用数据类型(数组、类、接口默认初始化值为null)
  • ②属性的声明格式: 修饰符 数据类型 变量名 = 初始化值; //java是强数据类型的语言
  • ③对属性的赋值的操作: A.默认初始化 B.显式的初始化 C.代码块的初始化 D.构造器的初始化 E.调用方法、属性进行赋值
  1. 方法:

  • ①格式: 修饰符 (其它的关键字: static/final/abstract)返回值类型 方法名 (形参列表){//方法体 }
  • ②方法的重载(overload) vs 方法的重写(override overwrite)
  • ③方法的参数传递机制: 值传递
  1. 构造器:

  • ①构造器的作用: A.创建类的对象 B.初始化对象的成员变量
  • ②构造器也是可以重载的.
  1. 代码块:

  • 主要作用: 用来初始化类的成员变量
  • 分类: 静态的代码块 vs 非静态的代码块
  1. 内部类:

  • ①分类: 成员内部类(static的成员 vs 非static的成员) vs 局部内部类(方法内部声明的类)
  • ②掌握: A.如何创建成员内部类的对象 B.如何区分调用外部类、内部类的变量(尤其是变量重名时) C.局部内部类的使用

2.类的初始化

  1. 如何创建类的对象. 如: Person p = new Person(); Date d = new Date();
  2. 内存解析:
  • 栈: 局部变量、对象的引用名、数组的引用名
  • 堆: new 出来的“东西”
  • 方法区: (字符串常量池)
  • 静态域: 存放类中静态的变量
  • 理解创建的对象在内存中加载的过程

二.面向对象的三大特性

1.封装性

  • ① 通过私有化类的成员变量, 通过公共的getter和setter方法来调用和修改
  • ② 还可以对类的其他结构进行“封装”
  • ③ 权限修饰符: public protected 缺省 private

2.继承性

通过让一个类A继承另一个类B, 就可以获取类B中的结构(主要的: 属性、方法、构造器). 子类: 类A; 父类: 类B

java中的类的继承性: 单继承的

3.多态性

  • ①体现: 方法的重载与重写; 子类对象的多态性 Person p = new Student();
  • ②子类对象多态性的使用: 虚拟方法调用.
  • ③向上转型 向下转型 Student s = (Student)p; //建议在向下转型之前: if(p instanceof Student)避免出现ClassCastException的异常

三.其他关键字

  1. this: 修饰属性、方法、构造器. 表示: 当前对象或当前正在创建的对象
  2. super: 修饰属性、方法、构造器. 显式的调用父类的相应的结构, 尤其是子父类有重名的方法、属性
  3. static: 修饰属性、方法、代码块、内部类. 随着类的加载而加载!
  4. final: 修饰类、属性、方法. 表示“最终的”
  5. abstract: 修饰类、方法
  6. interface: 表示是一个接口, (接口是与类并列的一个结构). 类与接口之间同时“implements”发生关系.
  7. package import …

abstract不能修饰属性、构造器、不能与final static private共用.


评论