目录
设计思想
面向对象是一种语言设计的思想(oop)
分类的思想,解决问题 扩展性高
面向过程(pop) 函数 代表语言C
解决问题是一步一步实现 用函数
类
概念:是描述一类事物的属性和行为的集合(抽象的定义模板)
创建类:发现类-->解决问题,找到共性
定义类 中的内容 都叫做类的成员
成员变量和方法 构造器 内部类 代码块
对象
使用时用的是类创建的实例(对象)
new 之后 一定要记着声明!!!
变量(按位置分)
按位置分
成员变量:{类中 可以使用所有的基本类型 可以不赋值 java构造器默认赋值} 局部变量 作用域整个类体
局部变量:方法体内(成员方法 构造方法 代码块) 作用域不同 必须赋值 方法结束后 局部变量就会被销毁(生命周期不同)
构造方法
构造方法和类名一样
没有返回值
默认存在的
每创建一个对象 就调用一次构造方法
作用:成员变量进行初始化赋值就是构造器的作用
方法的重载
overload
形参的数量和顺序必须有个不一样(区分)
定义了有参的构造方法 无参的构造方法默认消失
只看方法名和形参列表!
对象与引用
引用数据类型
java的对象是通过引用对其操作的
什么是引用数据类型?
栈:是运行存储(方法在栈)
堆:用来存储生成的对象
方法区:存储类信息
把对象在内存空间的地址赋给了左边的引用变量
值传递和引用传递
值和引用类型的区别
代码块
没有名称的方法体
实例代码块(跟着对象走)
静态代码块(跟着类走)
加载类就加载一系列的静态成员
but!!!类只会加载一次 所以 静态成员只会执行一次
创建对象:先加载类 后创建对象
执行的先后顺序 1静态代码块 2 实例代码块 3 构造器
包
目的:更好的组织管理类
全类名= 包名(根)+ 类名
控制访问权限
全小写
import
import 导入其他包中的类
如果有两个一样的类名 分别在两个不同的包中,导入一个后,还想使用第二个直接用全类名使用
访问级别 | 访问控制修饰符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | |
默认 | √ | √ | |||
私有 | private | √ |
*类只有public和默认
一个.java文件中只能有一个 public 类(和文件同名)
用访问权限修饰符修饰成员变量方法
封装*
概念:通过访问权限的修饰符,使得类的信息**是否对外可见**
方便加入控制语句
只能通过规定的方法访问
方便修改实现
使用案例:private 对成员变量和方法进行修饰,在其他类访问不到
单例模式
设计模式:
只让程序中创建一个对象
new 对象需要创建构造方法
1 private 构造器 这样就不能new了
2 在类中new一个对象 返回
3 本类中创建一个对象不赋值,
在方法中加条件返回它.
(=======做题遇到的问题=========)
*局部变量可以和成员变量同名
数据类型 加 名字 = new类名();
这就创建好了一个新的对象
而名字 = new 类名();这就是给已经创建好的对象赋值!!!
继承
实现代码的代码复用性(代码重用)
代码扩展(子类中添加子类特有的方法)
extents关键字 继承
is-a关系(什么是什么关系)
继承的传递性(A>B>C)(C有ab的方法)
默认类 继承 Object(基类)!!!
继承中的构造器
子类的先会调用父类的构造器!!!
子类拥有父类的成员,所以需要对父类的成员也需要初始化
super关键字(调父类的构造器(在子类构造器的第一行!!)) 解释:super可以调父类的构造器给父类私有属性赋值! 但是不创建任何父类对象
方法的重写
概念: 父类方法不能满足应用场景,所以子类要重写(覆盖)
方法结构一样搬过来,在子类重写功能
@override 表示此方法是从父类中重写,在编译期间 会进行语法校验
重写 权限可以等于大于
构造方法和静态方法 成员变量 不能重写
抽象类
abstract
抽象方法是概念方法-----不能用de
没有方法体 的 方法 叫做 抽象方法 不需要具体实现 只定义名字
抽象的类 里面有 抽象的方法 抽象类不能创建对象(因为对象 是 具体的)
约上层的类 越需要抽象 所以只需要定义 不需要具体实现(用于规范功能名字)
复习
1.类和对象的关系
2.在类中可定义那些内容
3.描述一下构造方法 特点
4.方法重载和方法重写
5.static理解
6.封装
7.为什么用继承
8.继承语法在使用时要求
9.继承中构造方法使用特征
多态
(多种状态)
实现多态的三种条件
-
要有继承(包括接口的实现)(前提条件)**
-
要有重写**
-
父类引用指向子类的对象()**
编译看左 运行看右(向上转型)
**静态和成员变量只看左边***
因为静态和成员变量在栈中(不确定)
方法在堆中
为什么要转????
为了程序的拓展性
多态2 要自己写一遍!!!!
缺点:子类本身自己的方法无法调用
然后就引入向下转型!!!大转小
关键字(instanceof):判断运行时 对象类型
向下转型需要判断对象类型
final
声明属性方法类
用final修饰的类不能被继承
1.用final修饰的常量要赋值
一般会和static一起使用
static final
2.在类中进行定义时.不进行赋值操作
在构造器中进行成员初始化
接口
用来定义功能 更彻底的抽象
面向接口编程 面向抽象编程
语法: interface
接口可以定义那些内容:
jdk7以前:只能定义抽象的方法和静态常量
8以后:还可以定义默认方法和静态方法(通过接口名访问)
接口和接口的关系
接口也可以互相继承(extends)
接口和类的关系
接口就是抽象,定义功能,让其他类实现
*implements(实现接口关键字)(可实现多个接口)
类实现接口
接口也实现多态.