面向对象

 封装,IS-A,HAS-A
 封装的目的是隐藏接口背后的实现
 被封装的代码具有两个功能:
  将实例变量保持为受保护的(通常为PRIVATE修饰符)
  读取器和设置器方法提供对实例的访问
 IS-A指继承
 IS-A用extends表达
 HAS-A指实例“具有”对另一个实例的引用

 

继承
 继承是一种机制,允许类成为一个超类的子类,从而继承超类的变量和方法
 继承是支持IS-A,多态性,重写,重载和强制转换的关键概念
 所有的类(除OBJECT)之外都是OBJECT类的子类,因而他们继承BOBJECT类的方法

 

多态性
 多态性意指“多种形式”
 引用变量总是单一不可变的类型,但是他可以引用子类型对象
 单一对象可以被许多不用类型的引用变量引用-只要他们具有相同的类型或者具有对象的子类型
 引用变量的类型(不同对象的类型)决定了可以调用哪些方法
 多态方法调用仅适用于重写的实例方法

 

重写和重载
 可以重写和重载方法:构造函数可以重载但不能重写
 第一个具体(非抽象)子类必须重写抽象方法
 对于重写方法:
  必须具有相同的参数列表
  必须具有相同的返回类型,只是从JAVA5开始,返回类型可以是子类型--这称为协变式返回
  一定不能有限制性更强的访问修饰符
  可以有限制性更弱的访问修饰符
  一定不能抛出新的或更广泛的检查异常
  可以抛出更少或更窄的检查异常,或者任何非检查异常
 不能重写最终方法
 只有继承的方法才可以被重写,并且记住:私有方法不能被继承
 子类调用super.overriddenMethodName调用重写方法的超类版本
 重载指重用相同的名称但是具有不同的参数
 重载方法:
  必须具有不同的参数列表;
  可以有不同的返回类型,只要参数列表也是不同的即可
  可以有不同的访问修饰符
  可以抛出不同的异常
 来自超类的方法在子类中可以重载
 多态性应用于重写而不是重载
 对象类型(不是引用类型)决定在运行时调用哪个重写方法
 引用类型决定在编译时使用哪个重载方法

 

引用变量强制转换
 引用变量强制转换有两类:向下强制转换和向上强制转换
 向下强制转换:如果具有子类对象的引用变量,则可以赋予它一个子类型的引用变量。必须执行显示的强制转换来完成此工作,其结果是:可以使用这个新的引用变量访问子类类型的成员
 向上强制转换:可以显式或隐式赋予一个引用变量一个超类型的引用变量。这是个天然安全的操作,因为赋值限制了新变量的访问能力

 

实现接口
 当实现一个接口时,就是在履行其合约
 通过正确、具体的重写接口的所有方法来实现一个接口
 单个类可以实现多个接口

 

返回类型
 重载方法能够修改返回类型;除协变式返回的情况外,重写方法不能修改返回类型
 对象引用类型可以接受null作为返回值
 对于声明和作为一个值返回来说,数组都是一种合法的返回类型
 对于带基本返回类型的方法来说,可以返回任何能够隐式转换成返回类型的任何值
 不能从void返回任何值,但是可以返回无!允许具有void返回类型的任何方法内只写一条return语句返回以前的方法。但是不允许从具有非void返回类型的方法返回无
 对于具有对象引用返回类型的方法,可以返回这种类型的子类
 对于具有接口引用返回类型的方法,尅返回该接口的任何实现

 

构造函数和实例化
 不调用构造函数就不能构造新对象
 对象继承数中的每个超类都将有一个被调用的构造函数
 每个类,甚至是抽象类,都至少有一个构造函数
 构造函数必须具有与其类相同的名称
 构造函数没有返回类型。如果有返回类型,则它只是一个具有与类和构造函数相同名称的方法
 典型的构造函数执行方法如下:
  构造函数调用其超类的构造函数,超类的构造函数又调用其超类的构造函数,如此一直调用下去,直至到达object的构造函数为止
  object构造函数执行,然后返回到调用构造函数,它执行完成后就返回到它的调用构造函数,如此进行下去,知道所创建实例的构造函数完成为止
 构造函数能够使用任何访问修饰符(甚至是private)
 如果在类中没有创建任何构造函数,则编译器将自动创建一个默认的构造函数
 默认构造函数是一个无参数构造函数,它带有对supper的无参数调用
 每个构造函数的第一条语句必须调用this(一个重载构造函数)或super()
 如果么有调用super(),编译器将添加它,除非已经插入了对this的调用
 只有在超类构造函数调用后其实例成员!
 抽象类具有的构造函数在具体类实例化时被调用
 接口没有构造函数
 如果超类没有无参数构造函数,则必须创建构造函数,并插入带参数的supper()调用,这些参数要与超类构造函数的那些参数匹配
 构造函数只能由另一个构造函数直接调用(使用对supper()或this()的调用)
 调用this()问题:
  只可以作为构造函数内的第一条语句出现;
  参数列表决定调用哪个重载构造函数
  构造函数可以调用构造函数能够调用的构造函数,如此下去,但是,他们中的一个迟早要调用supper(),否则栈将爆掉
  对于this()和supper()的调用不能位于同一个构造函数内,构造函数内只能有其中之一,不能二者兼顾。

静态成员
 使用静态方法实现的行为不受任何实例状态的影响
 使用静态变量储存类特有的数据,而不是实例特有的数据--静态变量只有一份副本
 所有的静态成员都属于类,不属于任何实例成员
 静态方法不能直接访问任何实例
 使用点运算符访问静态成员,但请记住:使用点运算符的引用变量确实是一种语法技巧,编译器将有引用变量的名称代替它,例如:
  d.dostuff();
  变成
  dog.dostuff()
 不能重写静态成员,但是可以重新定义。

 

耦合和内聚
 耦合指一个类了解或使用另一个类的程度
 松散耦合是一种理想状态,它具有良好封装的类,把相互间的引用减至最少,并且限制了API使用的宽度
 紧密耦合不是一种理想状态,它具有破坏松散耦合规则的类
 内聚指其中一个类具有单一,良好定义的角色和职责的程度
 高内聚是一种理想状态,其中类的成员支持单一,明确的角色和职责
 低内聚不是一种理想状态,其中类的成员支持多种不明确的角色和职责

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值