类和对象
类
1.类是模子,确定对象将会拥有的特性(属性),和行为(方法)
2.类是对象的类型,抽象的概念,模版
3.属性 对象具有的各种静态的特征,类的成员属性是有初始值的(int 0 double 0.0d String null char '\u0000' boolean false)
4.方法 对象具有的各种动态的行为
对象
1.对象是类的实例表现
2.对象是特定类型的数据
3.一个看得到/摸得着的具体实体
单一职责原则
对象实例化的过程可以分为两部分
1.声明对象 Cat one,在内存的栈开辟一个空间,是堆空间实例化对象的一个引用
2.实例化对象 new Cat(),在内存的堆空间开辟一个空间
构造方法
1.构造方法与类同名且没有返回值
2.构造方法的语法 访问修饰符 + 方法名 + 参数(没有返回值)
3.只能在对象实例化的时候被调用
4.当没有定义构造方法时,系统会自动生成一个无参构造方法
5.this 表示当前对象
封装
1.访问修饰符 public protected private
2.将类的某些信息隐藏在类的内部,不允许外部程序直接访问,通过该类提供的方法来实现对隐藏信息的操作和访问
3.隐藏对象的信息 private
4.留出访问的接口 getAttribute setAttribute
5.private 只允许在本类中使用
6.public 在任意类中访问
7.protected 在本类/非跨包的子类中可以访问, 跨包非子类不可以访问
包
1.包(域名+模块+功能)-- 进行文件的管理,来区分同名的类,将同名的类存放在不同的包中
2.定义包名:package (域名+模块+功能)
3.导入类:import com.book.animal.Cat(域名+模块+功能)
static
1.静态成员也叫类成员,类对象的共享
2.类加载时产生,销毁时释放,生命周期长
3.使用 类名+ 静态成员 进行访问
4.声明 :静态成员 static + 属性名, 静态的方法 static + 方法名
5.静态方法中不能直接访问非静态成员,只能直接调用静态成员
6.静态方法中不能使用this
继承
概念
1.一种类与类之间的关系
2.使用已存在的类的定义作为基础建立新类
3.新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类
4.满足 "a is a b" 的关系
特点
1.利于代码的复用
2.缩短开发周期
语法
1.使用 extend 实现继承
2.单一继承,只能有一个父类
方法重载
1.同一个类中
2.方法名相同,参数列表不同(参数顺序/个数/类型)
3.方法返回值和访问修饰符任意
方法的重写
1.有继承关系的子类中
2.方法名相同,参数列表相同(参数顺序/个数),方法返回值相同
3.访问修饰符,必须大于等于父类的访问范围
4.父类的构造方法不能被重写
5.static 方法不能被子类重写
super
1.super关键字是父类的引用
2.类的执行顺序 : 父类静态成员 --> 子类的静态成员 --> 父类的对象构造 --> 子类对象构造
3.子类默认调用的父类的无参构造,可以通过super() 调用父类允许被访问的其他构造方法,super() 必须放在子类构造方法有效代码的第一行
object
1.object 是所有类的父类
2.一个类没有使用extends关键子明确标识继承关系,则默认继承Object类(包括数组)
3.继承object中的equals方法时,比较的是两个引用是否指向的是同一个对象
4. 官方apiDoc toString() equels()
final关键字
1.final class 表示不允许被子类继承
2.final 方法 表示该方法不能被子类重写,但是可以正常被子类继承使用
3.final 局部变量 只要在具体使用之前赋值即可,一旦被赋值不允许被修改
4.final 成员属性 只能在定义初始化赋值 or 构造方法 or 构造代码块
5.final 修饰引用类型,引用类型地址不可以被更改,但是可以修改引用类型里面的值
6.同时使用 static final 来修饰程序中配置的信息
注解
1.可以声明在包/类/属性/方法/局部变量/方法参数等的前面,用来对这些元素进行说明/注释
设计模式
单例模式:
目的:使得类的一个对象成为该类系统中的唯一实例
定义:一个类且仅有一个实例,并且自行实例化向整个系统提供
优点:
1.在内存中只有一个对象,节省内存空间
2.避免频繁的创建对象,提高性能
3.避免对共享资源的多重占用
缺点:
1.扩展比较困难
2.如果实例化的对象长期不使用,系统将默认为垃圾进行回收,造成对象状态丢失。
创建型模式
结构性模式
行为型模式
多态
概念:意味着允许不同类的对象对同一消息做出不同的响应。(同样一种行为,在不同的对象产生不同的结果)
编译时多态 设计时多态,方法重载
运行时多态 程序运行时动态决定调用哪个方法
必要条件 满足继承关系 父类引用指向子类对象
向上转型 / 隐式转型 / 自动转型
父类引用指向子类实例,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类特有的方法(小类转型为大类)
向下转型 必须满足条件 instanceof 返回值 boolean , instanceof 判断一个左边的对象是否是右边的类的实例,成功返回true 失败返回 false
通过 instanceof 运算符,来解决引用对象的类型,避免类型转换的安全问题,提高代码的强壮性
抽象类和抽象方法
1.abstract 定义抽象类
2.抽象类不能直接实例化,只能被继承,可以通过向上转型完成对象实例
3.abstract 定义抽象方法,不需要具体实现
4.包含抽象方法对类,必须是一个抽象类
5.抽象类可以没有抽象方法
6. static private final 不能与 abstract共存的
接口
1.接口定义了某一批类所需要的规范
2.接口不关心这些类的内部数据,也不关心这些类里的方法的实现细节,它只规定这些类里必须提供某些方法
3.声明 【修饰符】 interface 接口名 【extends 父接口, 父接口2】
内部类
1.可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类
2.与之对应,包含内部类的类被称为外部类
3.成员内部类 / 静态内部类 / 方法内部类 / 匿名内部类
4.获取内部类的实例 Person.Heart = new Person().new Heart(); or 在外部类定义一个获取内部类实例的方法
5.内部类在外部使用时,无法直接实例化,需要借由外部信息才能完成实例化
6.内部类的访问修饰符,可以任意,但是访问范围会受到影响
7.内部类可以直接访问外部类的成员;如果出现同名的属性,优先访问内部类定义的
8.可以使用外部类.this.成员的方式,访问外部类中的同名的属性
9.外部类访问内部类的信息,需要通过内部类实例,无法直接访问
10.内部类编译后.class文件命名:外部类$内部类.class
11.静态内部类中,只能直接访问外部类的静态成员,如果需要访问外部类的非静态的成员,可以通过对象实例
12.静态内部类对象实例时,可以不依赖与外部类对象
13.可以通过外部类.内部类.静态成员的访问方式访问内部类中的静态成员
14.当需要访问外部类中的静态属性,则可以通过外部类.属性的方式
14.当需要访问外部类中的静态属性,则可以通过new 外部类.属性的方式
15.匿名类部类没有类型名称/实例对象名称
16.编译后的文件命名:外部类$数字.class
17.无法使用private / protected / abstract / static 修饰
18.无法编写构造访问,可以添加构造代码块
19.不能有静态成员
20.匿名内部类可以实现接口,也可以继承父类,但是两者不能同时使用