什么是类?什么是对象?
类中可以包含:
对象: 软件中真实存在的单个的个体、东西
类: 类型 / 类别,代表一类个体
类中包含:
成员变量 ------- 对象的属性
方法 ------------- 对象的行为、功能
声明类型的引用变量,指向对象
this:指代当前对象,
只能用在方法中,方法中访问成员变量之前默认有个this
this指代当前对象,哪个对象调用方法,this指的就是哪个对象
当成员变量与局部变量同名时,若想访问成员变量,则this不能省略
构造函数、构造器、构建器、
好处: 复用给成员变量赋初始值的代码
作用: 给成员变量赋初始值
语法: 与类同名,没有返回值类型(连void都没有)
调用: 在创建new对象时被自动调用
指代超类的成员变量
super . 成员变量名 -> 访问超类的成员变量
super . 方法名() -> 调用超类的方法
super()-> 不写且默认有该关键字调用超类的无参构造方法
Java规定: 构造派生类之前必须先构造超类
为了保证这个规则,Java做了两种操作
表示最终的,不可改变的
修饰变量:表示变量不能被改变
修饰方法:表示方法不能被重写
修饰类:表示类不能被继承
只有方法的定义,没有具体的实现(连{}都没有)
包含抽象方法的类必须是抽象类
由abstract修饰
抽象类不能被实例化(new对象)
抽象类是需要被继承的,派生类有两种处理方法
抽象类的意义
是一种引用数据类型
由interface定义
只能包含抽象方法(常量、默认方法、静态方法、私有方法)
接口不能被实例化(new对象)
接口是需要被实现的,实现类:必须重写接口中的所有抽象方法
注意:重写接口中的抽象方法时,必须加public
一个类可以实现多个接口。若又继承又实现,先继承再实现
接口可以继承接口
接口的应用:
类间关系
类和类 -> 继承+
接口和接口 -> 继承
类和接口 -> 实现
向上造型/自动类型转换
Animal o new Animal();
Dog o = new Dog();
Animal o = new Dog(); 把子类造成父类
Dog o new Animal //编译错误
应用1:
将超类型(Animal)作为参数类型
传递派生类(Dog Chick Fish) 对象
以扩大方法的应用范围
实现代码服用
应用2:
将不同对象(Dog chick Fish)
统一封装到超累数组 (Animal数组) 中来访问
实现代码服用
向下转型
向下转型/强制类型转换,成功的条件只有如下两种
1 引用所指向的对象,该类型
2 引用所指向的对象,实现了该接口或继承了该类
强转是若不符合如上条件,则发生 ClassCastException 类型转换异常
何时需要强转:若想访问的属性/行为在超类中没有,则需要强转
建议:在强转之前通过 instanceof关键字 判断引用指向的对象是否是该类型
引用类型数组
数组元素引用类型的数组,即为引用类型数组
高质量代码
复用
扩展
维护
移植
健壮
可读
性能
以方法为单位来解决问题,比较合适简单的业务(大象装冰箱、银行取钱)
以对象为单位来解决问题,比较合适复杂的业务(造汽车,造航母)
OO: (Object Oriented)面向对象
OOA: (Object Oriented Analysis)面向对象分析
OOD: (Object Oriented Design)面向对象设计
OOAD:面向对象分析与设计
OOP: (Object Oriented programming)面向对象编程
byte、short、int、long、char -> 0
float、double -> 0.0
boolean -> false
引用类型 -> null
由JVM来管理
堆: new出来的对象(包括实例(成员)变量、数组的元素、方法的地址)
栈: 局部变量(包括方法的参数)
方法区: .class字节码文件(包括所有方法、静态变量)
特点
内部类中可以直接访问外部类的成员
内部类中有个隐式的引用指向了创建它的外部类对象 外部类名.this
成员内部类
匿名内部类
package
用于声明包
作用:避免类的命名冲突
规则:同包中的类不能同名,但不同包的类可以同名
类的全称:包名.类名
建议:包名常常有层次结构,所有字母都小写
import
用于导入类
同包中的类可以直接访问,但不同包中的类不能直接访问,
若想访问:
先import导入类,再访问类
或者类的全称,但不建议过于麻烦
作用:保护数据的安全(隐藏数据、暴露行为)
设计:数据(成员变量)私有化 private
行为(方法)大部分公开化 public
public 公开、任何类
private 私有的,本类
protected 受保护的,本类,子类、同包类
默认的:什么也不写,本类、同包类(Java不建议)
访问权限由低到高依次为:
private < 默认的 < protected < public
类的访问权限只能是public或默认的类中成员的访问权限如上四种都可以
成员内部类充当成员不是类
由static 修饰的成员变量即为静态变量
成员变量分两种:
1、 实例变量:没有static修饰,属于对象,存储在堆中,有几个对象就有几份由对象/引用访问
2、静态变量:有static修饰,属于类,存储在方法区中,只有一份由类名访问
由static和final共同修饰的成员变量,即为常量
常量名所有字母都大写,多个单词之间用分隔
NAME
CLASS_NAME
常常通过类名来访问,不能被改变
常量
是一种引用数据类型
枚举类型的对象数目是固定的,常常用于定义一组常量
例如:季节、星期、月份、订单状态等
枚举的构造方法都是私有的
枚举的第一行默认都是罗列枚举对象名称