回顾:
面向对象:类、对象
特征:封装、继承、多态、(抽象)
类包含什么:属性、方法
=new 对象()
1.new 分配空间、属性默认初始值-0/null
2.构造方法/构造器,如果没有定义构造器,会自动添加默认的无参构造器
如果定义了其他构造器,无参构造器不会自动添加
3.将对象赋值给引用变量
构造器:初始化属性
内存:方法区-类相关信息(类加载器)/堆(对象)/栈(临时变量)
类加载:在类使用之前,将字节码文件中的类信息加载到方法区的过程
this、super
extends 父类 - 所有类的基类/父类 Object
子类的构造器会默认第一行添加 super() -> 调用父类的无参构造器
方法的重写Override/重载Overload
重写:方法名+方法参数 -> 方法签名,一致的
方法的返回值类型,“一致的”
访问控制:子类方法比父类更开放
异常 -> 后面讲
访问控制:public\protected\default\private
属性私有化 - 封装
T L O J S Z I
实体类书写规则:
1.首字母大写 - 驼峰命名法
2.属性要private私有化
3.提供get/set方法
4.无参构造器
向上造型 编译时类型 - 运行时类型
Animal a = new Dog();
a:能点出来的(能调用的),都是Animal中定义过的
b:运行时,方法调用的是子类重写过的方法
属性是绑定在类型上的,方法是绑定在对象上的
a instanceof Dog -> a是不是Dog类型的对象
继承/多态
多态:重载
重写 Animal a = new Dog(); Dog重写了Animal中的方法
Animal a = new Animal();
Animal a = new Dog(); a.sleep()-Dog没重写
a.eat()-Dog重写了
static:静态的,可以修饰成员变量、成员方法、内部类
不需要对象就可以直接调用的:静态的变量/静态的方法
1.修饰变量 -> 静态的成员变量/属性
只有一份 - 放在方法区中 -> 跟随类加载进入到方法区中
类加载只有一次,而且类加载后不一定会创建对象
调用时,通过类来调用 类名.静态属性名
和成员变量区分开
个数 调用方式
静态变量 1个 类.静态变量
成员变量 有几个对象就有几个成员变量 对象.属性
2.修饰方法 -> 静态方法 Arrays.toString()/
Math.random()/ System.in/out/err
使用时,通过类来调用 类名.静态方法名()
静态方法中不能直接使用非静态的方法和成员变量
普通的方法中可以使用静态的方法和静态的属性
类加载:在类使用之前,将字节码文件中的类信息加载到方法区的过程
3.修饰代码块
final:最终的、最后的 -> 不能被修改
1.修饰变量 -> 成员、局部 变量
常量 -> 不能修改的变量,必须有初始值
字面量/直接量:整数、小数、true、false、null
常量的命名,全部大写
所有final修饰的变量,必须初始化
2.修饰方法
不能被子类重写
3.修饰类:String Integer.MAX_VALUE
不能被继承
static + final 同时使用 -> 成员变量、方法
静态常量:只有一份、类.调用
不能被修改、一定要初始化
初始化:声明的同时、静态代码块中
final修饰的变量,在使用之前必须初始化
abstract:抽象的
1.修饰类:抽象类 -> 不能具体化/实例化
可以存在抽象方法
2.修饰方法:抽象方法 -> 没有方法体
子类继承父类,必须重写/实现父类所有的抽象方法
抽象类中一定包含抽象方法吗?
包含抽象方法的类一定是抽象类吗?
抽象类怎么实例化?
抽象类可以有构造器吗?作用?
接口interface -> 不是类class,定义功能、规范功能 JDBC规范 Servlet JSP
公共抽象方法
公共的静态常量
作用:扩展类的功能
类-类:继承 1-1
类-接口:实现 1-n
接口-接口:继承 1-n
接口-类:无
OOP:Object Oriented Programming 面向对象编程
内部类:定义在类内部的类
1.成员内部类
2.静态内部类
3.匿名内部类 重要!重要!重要!
4.局部内部类