1.创建对象并给对象设置初始值有两种方式:
方式1:先通过无参数构造器创建出一个对象,再通过对象调用相应的setter方法.
方式2: 直接调用带参数的构造器,创建出来的对象,就有了初始值.
通过构造器和通过setter方法都可以完成相同的功能. 给对象设置数据:
1):setter注入(属性注入). 2):构造注入.
如何选择:
(1)如果存在带参数的构造器,方式2是比较简洁的.
(2)如果在构建对象的时候需要初始化多个数据,如果使用方式2,那么构造器得提供N个参数,参数过大,不直观,此时方式1,简单明了.
( 3)圆对象,如何画圆. 圆对象,必须根据半径来确定对象.
就应该在构建圆对象的时候,就要确定半径值.
有时候,需要根据数据来构建对象,此时优先选用构造器方式.
其他时候,任选.
2.方法重载和方法覆盖(方法重写)的区别:
方法重载: Overload
方法重写: Override
方法重载: Overload
作用: 解决了同一个类中,相同功能的方法名不同的问题.
既然是相同的功能,那么方法的名字就应该相同.
规则: 两同一不同. 同类中,方法名相同,方法参数列表不同(参数类型,参数个数,参数顺序).
方法重写: Override
作用:解决子类继承父类之后,可能父类的某一个方法不满足子类的具体特征,此时需要重新在子类中定义该方法,并重写方法体.
规则: 一同两小,一大.
一同:父类和子类的方法签名是相同的,所以,建议:直接拷贝父类中方法的定义到子类中,再重写方法体,就OK了.
3. Object类的常见方法:
1): protected void finalize() :当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 垃圾回收器在回收某一个对象之前,会先调用该方法,做扫尾操作. 该方法我们不要去调用.
2): Class getClass() :返回当前对象的真实类型。
3): int hashCode(): 返回该对象的哈希码值,hashCode决定了对象再哈希表中的存储位置,不同对象的hashCode是不一样的.
4): boolean equals(Object obj) :拿当前对象(this)和参数obj做比较. 在Object类中的equals方法,本身和 “ == ”符号相同,都是比较对象的内存地址. 官方建议:每个类都应该覆盖equals方法,不要比较内存地址,而去比较我们关心的数据.,因为我们关系的是内容数据,而不是内存地址. 比如:两个学生对象,我们不管是如何new出来的,只要学号相同我就应该认为是同一个对象. 两个字符串,只要内容相同,我们就认为是同一个字符串.
5):String toString():表示把一个对象转换为字符串. 打印对象时,其实打印的就是对象的toString方法. System.out.println(obj对象);等价于 System.out.println(obj对象.toString()); 默认情况下打印对象,打印的是对象的十六进制的hashCode值,但是我们更关系对象中存储的数据. 官方建议我们:应该每个类都应该覆盖toString,返回我们关心的数据.
3.final修饰符
final本身的含义是“最终的,不可改变的”,它可以修饰非抽象类,非抽象方法和变量。注意:构造方法不能使用final修饰,因为构造方法不能被继承,肯定是最终的。
4.接口
接口成员:
接口的命名:一般的,接口表示就有某种能力的,有时候,有人习惯使用able/handle作为后缀. 为了从名字上区分是接口还是类,大多数人习惯使用I作为接口名前缀.
全局静态常量,接口中定义的变量,默认以:public static final修饰.
2):公共静态内部类: 默认以,public static修饰.如Map接口值Entry.
3):公共的抽象方法:在接口中定义的方法,默认以:public abstract修饰.
为什么接口中的方法都是抽象方法,因为接口仅仅只是规定具有哪些行为,实现.
接口的特点和实现类: ------------------------------------------
特点: ① 没有构造方法,不能实例化。 ② 接口只能继承接口,不能继承类,且接口支持多继承。 一个接口允许有多个父接口. interface IWalkable extends 接口1,接口2{}
③ 接口里的方法方法全是抽象的,默修饰符是public abstract。
④ 接口里的字段全是全局静态常量,默认修饰符是public static final。
⑤ 接口里的内部类全是静态的,默认修饰符是public static。
------------------------------------------
接口的目的,在于高度的统一规范,接口必须要有实现才有意义. 我们把实现接口的类,称之为实现类,功能在于实现接口中的多个抽象方法.
5.接口和抽象类
相同点: 都位于继承的顶端,用于被其他实现或继承。 都不能实例化。 都可以定义抽象方法,其子类都必须覆写这些抽象方法。 区别: 接口没有构造方法,抽象类有构造方法。 抽象类可包含普通方法和抽象方法,接口只能包含抽象方法; 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口(接口弥补了Java的单继承)。