前言:因为最近比较迷茫,工作比较轻松,所以准备再仔细学习一下Java
封装:
是将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
封装的优点:只能通过规定的方式来访问数据;隐藏类的实现细节;方便加入控制语句(比如验证参数合法性);方便修改实现(比如修改了属性的类型,接口可以添加一次转换)。
继承:
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。简单概括为,父类提供共性,子类补充特殊性。
使用继承时的三个关键:子类拥有父类的所有属性和方法,但只能调用非private的属性和方法;子类可以对父类进行扩展,拥有自己的属性和方法;子类可以自己实现父类的方法。
构造器:子类不能继承父类的构造器,只能调用父类的非private构造器,使用super()。切记必须在子类构造器第一行调用。
protected 关键字:方便同一个包的类和子类访问。
向上转型:class A;class B extend A;A b = new B() 的使用,即B是A的意思。
切记谨慎使用继承,理解is-a的关系。代码重用可以考虑工具类,行为相同可以考虑接口。《Think in Java》提到:问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。
多态:
所谓多态,就是指一个引用(类型)在不同的情况下的多种状态。也可以理解为,多态是指通过指向父类的指针,来调用在不同子类中实现的方法。
在上面提到子类可以自己实现父类的方法。例如 class A;class B extend A;class C extend A;在B 和C中分别自己实现了A的某个函数,当A b = new B() A c = new C() 时,调用b,c 相同函数可能会返回不同的行为,因为父类的引用变量指向子类对象了。
对于继承和接口实现的一些想法:
1,一个类只能继承一个类,但是可以实现多个接口。
2,依赖倒转原则: 依赖抽象(例如接口),不要依赖于实现。
3,合成/聚合复用原则(CARP): 尽量使用合成/聚合,而不是继承关系达到复用的目的。
4,接口传达的意思是:拥有某种功能,能干嘛,比如:Serializable代表可序列化的。
5,继承传达的是意思是:is-a,比如:猫 是一个 动物,猫就是动物的子类。