面向对象思想

目录

  • 类与对象
  • 接口与实现
  • 继承与封装
  • 不可变对象
  • 泛型

类与对象

一般概念和问题

  • 类的成员变量 -->对象状态
  • 类的成员函数 -->对象行为

  • 类的静态变量、类的静态函数 -->没有this引用,全局唯一一份
  • 普通函数引用静态变量、静态函数 ? 正确
  • 对象上引用静态变量、静态函数 ?编译警告
  • 静态函数引用普通成员变量、函数 ? 编译错误,因为拿不到this引用

对象的特殊函数

  • 构造函数:没有返回值,返回本身
  • equals:和(==)等价,一般要重写
  • hashCode:a.equals(b) 可推出 a.hashCode( ) == b.hashCode( ),反之不行,因为有时不同对象的hashCode值会相等
  • toString:重写

接口

与类相比

  • 由编译器强制的一个模块间协作的合约(Contract)
  • 无成员变量
  • 成员函数只有申明不能实现

接口和抽象类的区别

  • 抽象类可以有成员变量
  • 抽象类可以有部分实现
  • 抽象类不可以多重继承,接口可以

But why ?(为何有抽象类还要有接口)

  • 从用户角度看问题
  • 强调合约
  • 强制协作双方无法犯错
  • 抽象类实现了一些公有的实现,接口描述了类有哪些功能,虽然二者相似,但其实不是一个维度的概念

继承

  • is - a 的关系
  • 子类增加或修改(注意不能减少)基类

封装

  类内部 包内部 派生类 外部
private Y N N N
默认 Y Y N N
protected Y Y Y N
public Y Y Y

Y

  • 默认也称package private
  • 尽量只使用private 和 public
  • 基类private ->子类public ? 正确 
  • 基类public->子类private ?错误(常见面试题,子类不能使基类权限变小)

不可变性

final关键字

  • 类声明  -> 类不可以被继承
  • 函数申明函数 -> 不可以在派生类中重写
  • 变量申明变量 -> 不可以指向其他对象,里面的内容可以改变
  • static final 变量 -> 用于定义常量名称一般大写

泛型

  • ArrayList<Integer> 是List<Integer>吗 ?是的
  • List<Integer>是List<Object>吗 ?错误

   把List<Integer>转换成List<Object>

  • new ArrayList<Object>(intList);正确
  • (List<Object>)(List)intList;危险





猜你喜欢

转载自blog.csdn.net/u013015065/article/details/79344172