面向对象的三大特征
- 继承
- 继承
- 多态
封装
面向对象的封装有两层含义
|-- 类,属性、方法这些定义在类
|-- 函数
为了安全考虑,在开发的过程中,会将属性私有化(private关键字修饰),需要提供对应接口完成设置和访问(公开的setter和getter方法)的过程。
POJO对象(Plain Ordinary Java Object)
标准的java bean对象
根据封装来写
私有化属性
提供公开的setter和getter方法
至少两个或者以上的构造方法
私有化构造函数
|-- 工具类(静态方法或者静态属性)
|-- 单例模式
面向对象的专业术语:
OO(Oriented Object):面向对象
OOP(Oriented Object Programming):面向对象的编程
OOD(Oriented Object Design):面对对象的设计
OOA(Oriented Object Analysis):面向对象的分析
OOT(Oriented Object Test):面向对象的测试
面向对象的三大特征之二,继承
在面向对象中,类与类之间可以存在继承关系
在Java中,也存在继承,java是一种典型的单继承编程语言。
java如何实现继承:
extends
父类(超类、基类)
子类
注意:private修饰的属性和方法都是无法被子类继承的
protected修饰的方法,就是用来给子类继承!
继承的功能:
减少代码的重复,提高代码的复用度
方法重写(覆盖)
重写(OverWrite)
覆盖(OverRide)
发生在继承中,指的是,子类继承了父类方法后,该方法不能满足子类,重写该方法,已达到满足子类使用。
访问修饰符 返回值类型 名称一致() {
}
注:访问修饰符的权限可以放大,但是不能缩小
重载(OverLoad)
注解(annotation)
JDK5.0提供的新特性,利用反射技术,可以很轻松使用标注方法、属性、类等,从而扩展功能。
@Override // 覆盖,该方法就是重写方法
@Deprecated // 过时警告
@SuppressWarnning //压制警告
super关键字
super在java中,是一个指针,类似于this关键字
this关键字指向创建的每一个对象
super会自动指向父类
super(); // 调用父类的无参构造
对象的创建流程:
1、使用java命令将源码(.java)进行编译,生成字节码文件(.class)
2、javac命令执行字节码文件
3、将字节码文件加载进虚拟机(JVM),静态方法区开始加载静态资源
4、JVM从静态方法区读取主函数,并加载进栈(执行栈被创建了出来)
5、main函数开始执行, 创建对象的代码,如:Son son = new Son();
6、在堆内存中开辟对象的内存空间,并分配地址
7、创建成员变量并进行默认初始化
8、子类构造函数从非静态方法区加载进栈开始执行
9、第一句先执行父类的构造函数
10、父类构造函数执行,为子类继承到的成员变量进行初始化(对象内存空间里的父类空间)
11、父类构造函数弹栈执行完成
12、子类构造函数继续执行,此时先对成员变量进行显式初始化
13、再执行子类构造函数的内容,进行针对性初始化
14、执行完成,子类构造函数弹栈,将对象的内存空间地址赋予相应的引用变量
方法区:(Method Area)
元数据区:(Metaspace)
多态:
面向对象三大特征之一:
在继承基础上,才有多态
概念:父类引用指向子类实例
abstract class Animal{
//由于每一个小动物的eat方式都不一样,因此在父类中无法准确描述eat的具体行为
//因此只能使用抽象方法描述,从而导致这个类也为抽象类
abstract public void eat();
}
//描述狗,狗有吃饭,看家的行为
class Dog extends Animal{
public void eat(){
System.out.println("啃骨头");
}
public void lookHome(){
System.out.println("看家");
}
}
//描述猫,猫有吃饭,抓老鼠行为
class Cat extends Animal{
public void eat(){
System.out.println("吃鱼");
}
public void catchMouse(){
System.out.println("抓老鼠");
}
}
List list = new List(); // 创建List对象
List list = new ArrayList(); // 多态
多态的前提:
1、必须有关系:继承,实现
2、通常都有重写操作