1、基本定义
-
类
public class Demo { // 属性状态 private String name; // 方法行为 void setName(String name) { this.name = name } }
- 对事物、逻辑、算法或概念的抽象。描述一类对象的行为和状态。
-
对象(实例)
- 对象是类的一个实例(对象不是找个女朋友),有状态和行为。
-
引用
- java中,一切都“看作”对象,但操纵的标识符实际是指向一个对象的“引用”(reference)。”
-
构造方法
- 新建对象时,执行的一个特殊方法
- 在创建一个对象的时候,至少要调用一个构造方法
- 构造方法的名称必须与类同名,一个类可以有多个构造方法
-
this
- 引用当前对象
- 构造方法之间调用
-
方法重载overload
- 同名不同参
-
抽象类
abstract class Person { public abstract void run(); }
- 作用
-
为子类提供通用代码
-
为子类提供通用方法的定义
-
注意点
- 抽象类不能创建对象
- 包含抽象方法的类,必须是抽象类
- 抽象类中,不一定有抽象方法
-
- 作用
-
final
- 最终不可变的
- 修饰变量、方法、类
-
static(静态)
- 静态变量属于类,可以成为“类变量”
- 非静态成员属于实例
- 静态成员通常使用类名直接调用
- 被static修饰的成员将最优先加载到内存
2、接口
[可见度] interface 接口名称 [extends 其他的接口名] {
// 声明变量
// 抽象方法
}
-
作用
-
结构设计工具,用来解耦合
-
极端的抽象类
-
用interface替代class
-
用implements替代extends
-
接口中只能定义
-
公共的常量
-
公共的抽象方法
-
公共的内部类、内部接口
-
3、内部类
-
定义
- 定义在类内部,方法内部或局部代码块中的类
-
非静态内部类
class OuterClass { ... class NestedClass { ... } }
- 非静态内部类依赖于外部类对象存在
- 在非静态内部类中,不能定义静态成员
-
静态内部类
public class StaticInnerTest { private int x = 1; private static int y = 2; public void test(){ System.out.println(new InnerClass().a); System.out.println(InnerClass.b); } static class InnerClass { private int a = 3; private static int b = 4; public void test(){ //无法访问 // System.out.println(x); System.out.println(y); } } }
- 使用static修饰的成员内部类,称之为静态内部类
- 静态内部类只能访问外部类的静态成员
- 不能直接访问外部类的非静态成员
-
局部内部类
public class Test { public void method() { class Inner { // 局部内部类 } } }
-
定义
- 声明在方法内部的类
- 局部类型,只能在局部使用
- 但它的实例,可以转为父类型传递出去
-
注意
- 不可以使用任何访问权限修饰符
- 不可以直接访问局部变量(方法的参数等效于局部变量)
- 如果一定需要访问,则需要使用final对局部变量进行修饰
-
-
匿名内部类
abstract class Person { public abstract void eat(); } public class Demo { public static void main(String[] args) { Person p = new Person() { public void eat() { System.out.println("eat something"); } }; p.eat(); } }
-
直接创建已知的类的子类的对象,则该对象的类型就是匿名内部类
-
匿名内部类也就是没有名字的内部类
-
因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写
-
使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
-