对象与引用
引用数据类型
什么是引用数据类型?
除了基本数据类型以外的变量类型都称为引用数据类型
new Person(); 在堆内存空间中创建了一个对象
Person p1 声明一个引用变量
= 把对象在内存空间中的地址赋给了左边的引用变量
this 关键字
this 表示当前调用的对象
static 静态 修饰类的属性,方法,代码块,内部类
随着类的加载而加载 :类一旦被加载,加载对象就会被加载初始化
优先于对象存在
修饰的成员,被所有对象共享
可不创建对象
包:理解为是一个像文件夹,组织管理类
是类的命名空间
类名 Car(类名的简称)
类名==全类名==包名(类的地址)+类名
包的命名规范
字母都小写com(项目名称 org开源组织,gov政府,edu教育类)
ffyc 公司名称
javaoop 项目的名字
按照不同的功能来管理命名
第一级 指该项目的类型 如com,org,gov
第二级 指项目所开发或者运行的公司名称 如 oracle,sun,huawei
第三级 指项目的名称 如 bcms,oa,erp,cms
第四级 指项目模块的名称 如 bean,action,exception
包可以更好得管理逻辑相关的类,可以控制不同包之间的访问权限
作用:
区分同名类
按照不同的功能管理类
访问权限的控制
访问权限修饰符
四个权限修饰符(由大到小)
public 公共权限 修饰类,属性,方法
protected 受保护权限 修饰属性,方法
默认
private 私有权限 修饰属性,方法
用访问权限修饰符修饰成员变量,成员方法,修饰是否在其他地方可见
面向对象语言的三大特征:
封装
继承
多态
封装: 一词多义
面向对象语言中的封装:指通过访问权限修饰符,使得类中的信息是否对外可见(隐藏类中的信息)
面向对象特征:继承 关键字: extends
什么是继承?
子 继承 父
为什么用继承?
代码重用 子继承父之后就可以使用父中的功能,不需要重新定义.
代码扩展 在自己类中扩展自己特有的功能.不影响别的类 多重继承传递
具体的语法
首先 有一个基类--派生出--->新的类
把共有的属性和行为定义在基类中,让其他类去继承即可
同一类的事物,,都可以使用继承关系来实现设计
符合什么是什么的关系,即is-a关系
是实现代码重用的根基
当一个类没有继承其他类时,默认继承Object类
是java中所有类的父类
1.继承中的构造方法
子类构造方法在执行时,会先调用父类的构造方法
构造方法的作用是用来为对象中的属性进行赋值操作
因为子类拥有父类成员,所以需要对父类中的成员也要初始化
在自类构造方法中,默认是有调用的,使用的super()调用父类的无参构造
必须在子类构造方法的第一行,先要确保父类初始化
使用super表示父类,对父类中成员(构造方法,成员变量,成员方法)进行访问
2.方法重写
重写/覆写/覆盖
应用场景:
当父类中的方法实现(功能)不能满足子类需求时,可以在子类中对父类中的方法进行重写(覆盖)
当子类实现的功能与父类不同时,可以在子类中对父类中的方法进行重写(覆盖)
@override 注解标签,表示此方法是从父类中重写而来的,在编译期间就会进行语法上的校验
访问需要大于等于父类权限
构造方法,静态方法不能重写.成员变量不存在重写
3.抽象类
类是抽象的,是概念,不能直接用
抽象方法--->概念方法--->不能用的
abstract修饰的方法叫抽象方法
抽象的方法没有方法体,没有具体的实现,主要是用来定义功能
abstract修饰的类叫抽象类
一旦这个类中有不完整的,没有实现的抽象方法,那么这个类也就必须是一个抽象的类
4.面向对象特征--多态
多态-- 多种状态
面向同一种事物,在不同时刻表现不同的状态
要有继承(包括接口的实现)(前提条件)
要有重写(前提条件)
父类引用指向自类对象
2.final关键字
3.接口
既陌生又熟悉
接口
usb接口 连接串口 是一种标准规范 大小,传输数据...
抽象类:不完整的类,里面包含抽象方法,但是还可以定义成员变量,成员方法,构造方法
接口--->规则,规范 用来定义功能 更彻底的抽象 接口,抽象类--->定义,抽象
在实际复杂的程序设计中,上层一般都是“抽象的”,面向的是抽象进行编程
架构是定义接口,定义抽象类
业务程序去对接口,抽象类进行实现
学接口的具体语法:interface修饰的是接口
接口中可以定义哪些内容
jdk8之前 只能定义抽象方法和静态常量
jdk8之后 可以定义抽象方法和静态常量
还可以定义默认方法和静态方法