面向对象
对象与引用
方法调用传递参数时 的分为两种
值传递(形参数据类型为基本数据类型): 方法执行中形参数据的改变不影响实参的值 是两个独立的变量
引用传递(形参数据类型是引用数据类型):方法执行中形参数据的改变影响实参的值 传递的是对象的地址 实参,形参指向同一个对象
this关键字
this在类中表示正在访问的对象
区分成员变量,局部变量
static
修饰成员变量,方法,代码块,内部类
修饰属性
成员变量也成为类变量 类有共同属性时使用static 内存空间只有一份 所有对象可共享 定义之初即可赋值
修饰内容:
随类的加载而加载,通过类名加载
修饰成员方法(类方法)
方法使用非静态成员变量,则方法不能被定义为静态的,静态方法只能使用静态的成员变量
非静态的方法可以使用静态的成员变量。 可直接使用类名访问。
静态方法不能用this和super
代码块(一个没有名字的代码块)
实例代码块:在每次创建对象执行
静态代码块:类被加载时自动执行
public class Demo { { System.out.println("林青霞"); }(实例代码块) static { System.out.println("张曼玉2"); }(静态代码块) }
public class Teatdemo { public static void main(String[] args) { new Demo(); } }
包
作用: 在Java中用包管理类
作用:避免类重名 控制访问权限(在不同包中,对不同权限的成员)
目前至少三级
第一级 项目类型 com org gov edu
第二级 公司名字 baidu sun
第三级 项目名字 oa erp
第四级 功能模块
访问权限修饰符
可修饰类,成员变量,成员方法,内部类(公共,受保护,默认,私人都可修饰)
public(公共权限)在任何地方都可访问,本类,本包其他类,其他包中的类
protected(受保护) 本类 ,本包其他类可访问,还可在其他包的类中访问
private(私人)只能在同类中访问本类,同包其他类中可以访问
默认权限:
面向对象语言的三大特征
封装
一般意义的封装 例如将重复出现的代码抽取一个函数,即为代码的封装。
面向对象语言的封装
将类中的某些信息使用不同的权限修饰符隐藏起来不让外部直接操作而是通过类向外提供特定的方法去访问操作,方便加入控制语句,主动权在类自己手中
类中方法私有化
单例模式:让一个类在一个程序中只能创建一个对象
变量分类
按位置分
成员变量:在类中定义 可以使用权限修饰符 ,在构造方法中自动进行初始化赋值
生命周期
:非静态:随着对象的销毁而销毁,创建而创建
静态: 随类的加载而加载,随类的销毁而销毁
存储位置 :
非静态 :堆
静态 : 方法区
局部变量:定义在方法,或者是参数中 不可以使用权限修饰符
必须自主初始化
继承
将同一类事物中共性的属性和行为进行抽取,定义在一个类中(基类)其他类可以继承基类,拥有基类的功能 实现代码的复用性以及在子类中扩展自己的功能而不影响其他类。(只要是符合iS—a)就使用继承
特点:减少冗余提高代码的复用性
一个类只能直接继承一个类间接继承多个类,具有一定的传递性。
子类继承父类,拥有父类的成员变量,成员方法,不能直接访问父类的私有成员。
当一个类没有显示的继承则该类默认继承object类(Java体系中最大的,object之上再无其他类)
方法重写
当父类方法实现不能满足子类需求时,可以在子类中对父类方法进行覆盖。
要求:子类重写的结构与父类的结构一致。方法名参数列表,返回值必须一致。父类私有权限不能重写
@override 注解标签表示此方法是父类重写来的。重写方法结构与父类方法一致,也算正确重写。
建议保留 1.编译器进行语言验证,2.阅读时明确方法是重写的。
方法重载 方法名相同,参数不同(数量,顺序,类型)
super
在子类中调用父类中的成员,构造方法
注意 super和this的用法相像,this表示当前对象,但super表示父类成员而不是父类对象。
继承中的构造方法:在创建子类对象
抽象
抽象方法(没有方法体,用abstract修饰);一种特殊方法,只有声明没有具体的实现的方法
在一些体系结构顶端类,有些功能没必要实现因为子类实现都不同,此时可将方法声明为抽象方法。
类中包含抽象方法必是抽象类,抽象类不一定包含抽象方法。抽象类可能包含抽象方法,抽象方法不完整所以类也是抽象。
特点:
1.抽象类不能被创建对象,其他功能与正常类相同,也可以有成员变量,成员方法,构造方法
2.主要在上层定义功能,在子类继承实现
多态(同种事物在不同时刻表现不同状态)也称为向上转型
父类的引用变量,指向子类对象(必须要有继承关系)
优点:可以提高程序的扩展
缺点:一旦转为父类类型就不能调用子类中有方法 可以向下强制转换可参考引用类型强制转换
不同时期:
编译:类型是父类 运行:为子类
多态语法
成员方法:编译看左边 运行看右边
静态成员方法 :编译运行都看左边
成员变量:编译运行都看左边
将子类类型转换父类类型就不能调用子类特有方法 解决:将父类转换为子类
父类 instanceof 具体子类类型(表示父类中持有实际类型是否为指定类型)
final
用于修饰类,方法,参数,成员变量(常量)
接口(一种特殊的抽象类,可以包含抽象方法)
是计算机领域的名词,表示功能的定义例如USB接口定义
接口不能被创建对象被其他类实现,重写抽象方法
定义
类通过implements 关键字实现接口
一个类可以继承一个类,一个类可以继承多个接口,一个接口可以多个接口
接口和类之间存在多态性