一: 类和对象
- 类是模子,确定对象将具有的特征(属性)和行为(方法)。
- 类的特点:类是对象的类型,具有相同属性和方法的一组对象集合。
- 属性:对象具有的各种特征;每个对象的每个属性都拥有特定的值。
- 方法:对象执行的操作。
- 类和对象的关系:类是抽象的概念,仅仅是模板,对象是一个具体实体。
- 成员变量:在类中定义,用来描述对象要有什么。
- 局部变量:在类的方法中定义,在方法中临时保存数据。
- 成员变量与局部变量的区别:
I:作用域不同,成员变量的作用域是整个类,局部变量的作用域是方法内部。
II:初始值不同:java会给成员变量一个初始值,不会给局部变量一个初始值。 - 局部变量与成员变量重名时,局部变量拥有更高的优先级。
- 构造方法:java类中的一个用来初始化对象的方法,名称与类名相同,没有返回值;当有指定构造方法时,无论有参、无参的构造方法,系统都不会自动添加无参的构造方法;构造方法不但可以给对象的属性赋值,还可以保证给对象的属性赋一个合理的值。
- Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问。
- 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。
- 静态方法最适合工具类中方法的定义;比如文件操作,日期处理方法等;静态变量适合全局变量的定义。
- 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块;需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
二:封装
- 定义:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
- 好处:只能通过规定的方法访问数据;隐藏类的实例细节,方便修改和实现。
- 访问修饰符:private:本类;缺省:本类、同包;protected:本类、同包、子类;public:都可以。
- this关键字:表示当前对象,用来区分同名的成员变量和局部变量。
- 内部类的作用:内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类;内部类的方法可以直接访问外部类的所有数据,包括私有的数据;内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。
- 内部类的分类:成员内部类、静态内部类、方法内部类、匿名内部类。
- 内部类 对象名 = 外部类对象.new 内部类( )。
- 外部类是不能直接使用内部类的成员和方法;如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。
- Java 中的静态内部类:静态内部类是 static 修饰的内部类,这种内部类的特点是: 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问;如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员;创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名=new 内部类()。
- 方法内部类:就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和static修饰符。
三:继承(extends)
- 方法的重写:当调用方法时会优先调用子类的方法;返回值类型、方法名、参数类型顺序及个数相同。
2.方法的重载:位于一个类之中或者其子类中,具有相同的方法名,但是方法的参数不同,返回值类型可以相同也可以不同。 - 继承的初始化顺序:先初始化父类再初始化子类;先执行初始化对象中的属性, 再执行构造方法中的初始化(执行构造方法)。
- final修饰的类不能被继承;final修饰的方法不能被重写;final修饰的属性不会隐性的初始化,必须在声明时或构造函数时初始化;final修饰的变量只能赋一次值。
- super关键字:在对象的内部使用,可以代表父类对象
- 子类的构造过程必须调用其父类的构造方法,如果子类的构造方法中没有调用父类的构造方法,则系统默认调用父类无参的构造方法,如果显示的调用构造方法,必须在子类构造方法的第一行,如果子类的构造方法中没有显示的调用父类的构造方法,而父类的构造方法中又没有无参的构造方法,则编译就会报错。
- Object类是所有类的父类,其toString方法输出对象在内存中的地址(哈希code),equals方法比较两个对象的引用是否相同,可以重写toString和equals方法。
四: 多态
- 含义:对象具有多种形态。
- 引用多态:父类的引用可以指向本类和子类的对象。
- 方法多态:调用的方法是子类对象中的方法。
- 父类的引用不能调用子类独有的方法。
- 引用类型转换:向上类型转换(隐式/自动类型转换),小类型到大类型的转换;
向下类型转换:强类型转换,是大类型到小类型。
instance of 运算符,来解决引用对象的类型,避免类型转换的安全性问题。 - 抽象类:abstract
应用场景:
a、某个父类只是知道子类应该包含怎样的方法,但无法知道子类怎么实现这些方法
b、从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类为模板,避免了子类设计的随意性
作用:限制规定子类必须实现某些方法,但不关注实现细节
使用规则:包含抽象方法的类是抽象类;抽象类中可以包含普通方法,也可以没有抽象方法;由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。 - 接口:由全部常量和公共的抽象方法组成的特殊类;
接口中方法不能有方法体,同时方法的访问修饰符不能是 private 和protected;
继承父类必须在实现接口之前;
接口命名通常会在前加I;
接口在使用过程中经常与匿名内部类配合使用;
匿名内部类就是没有名字的内部类,多用于关注实现而不关注实现类的名称
Interface i = new Interface(){
public void method(){
}
}