第一次写技术类的博客,希望会越来越好!
面向对象
·面向对象的三大基本特征是:封装、继承、多态。
·面向对象的编程思想就是把事物看作一个整体,从事物的特征(属性)和行为(方法)两个方面进行描述。
·面向对象的过程就是找对象、建立对象、使用对象、维护对象的过程。
接下来我将从5个方面入手来讨论面向对象。
一.类与对象
概念:程序中需要使用很多复合型数据,比如学生,棋子,日期,复数,这些类型都需要自己定义。
类: class 类别
分析这类事物都具有的属性 特征 行为 功能
Java里面的类由关键字class定义,类中的元素称为:成员属性。类中的函数称为:成员方法。
对象:Object 具体的事物
EXAMPLE:
·人 书 计算机 球 (类别)
·具体的某个人 我在使用的计算机(对象)
定义类:自己创建一个复合数据类型
—public class 类名{ }
————Java程序中的基本单位是类
————定义的类 不一定都具有属性和方法的类,也可以是一些功能类
内容: 学生类
(
姓名 年龄 学号
|
上课 考试 学习 查看信息
)
——属性:表达数据信息 通常使用变量/
常量表示
格式:
数据类型 数据变量名;
final 数据类型 数据变量名;
——方法:表达行为
/
功能的逻辑 通常使用一段代码表示
{ } (
方法
)
格式: 修饰符 返回值类型 方法名
(参数列表){ // 方法体 }
(代码中虽然不会报错,但是也需要考虑到现实问题,例如年龄不会有负数。)
除此属性和方法之外还包括:
1.构造方法
2.构造代码块
3.静态属性变量
/
常量
4.静态方法
5.静态代码块
创建对象:使用自己定义复合数据类型创建变量,这种叫做对象变量
格式:类名 对象名=new 类名();
变量:
1.属性
2.参数
3.某个
{ }
中的局部变量 方法中的局部变量 循环中局部变量 条件语句中局部变量 代码块中
局部变量
(多去尝试自己解释一些名词,这样会加深印象和理解)
二.封装
访问权限修饰符:
在代码编译期间作用代码可以使用的范围 ,限制代码的使用范围
public :
整个项目下都可以访问
private :只能在类的括号中使用访问
protected
: 只能在同包下
/
不同包的子类中可以访问
缺省不写: 只能在同包下
访问权限修饰符可以修饰:
类 :
public
缺省不写
接口:
public
缺省不写
属性: 四种皆可
方法: 四种皆可
构造方法: 四种皆可
·比如,我创建了一个学生类,在学生类中定义一些私有的属性
那么我在另一个类中创建一个学生类的对象,这个对象对应的对象变量名不能调用学生类中
属性来赋值或者使用
大致是这样:
package
com09
.
oop
.
zyf0927
;
public class
Student
{
private
String
name
;
………………………………
}
public class
StuManage
{
public static void
main
(
String
[]
args
){
stu.name="";// 'name' has private access in 'com09.oop.zyf0927.Student——这里就会报错
}
}
封
:
给属性和方法设定权限 ,其他类中就不能直接使用了
(可以封装属性,不然错误数据设置给属性)
装: 打包
可以在类中提供 不受限制的方法来访问属性 或者 给属性赋值
set&get
方法
带参数的构造方法
(this其实是一个关键字,表示
当前方法的引用,那么为什么要有这个关键字呢,那是因为当变量名相同时,局部变量有限使用,可能会导致无法赋值等情况)
构造方法
语法: 修饰符 类名
(
参数列表
){ }
1
: 每个类都存在一个隐式的空参数的构造方法
2
: 自己可以显示的创建构造方法,创建之后会覆盖隐式的构造方法
3
: 构造方法是创建对象时调用
new
类名
();
4:
自己给自己创建的构造方法加上参数 初始化对象
自己私有化构造方法,就会导致这个类不能在其他类中创建对象使用
单例模式:
一个类只能存在一个对象,那么这个类就不能随随便便创建对象了
实现单例模式的前提就是私有化构造方法
在本类中定义一个固定的对象,由
static
修饰 ,这个对象就可以使用类名直接调用了
,
而
且也只能调用这个对象
这个类之外就不能再创建对象,只拥有自己类中创建的一个对象
static & final :
——static
静态的 唯一
属性 :这个属性属于类,在内存中只会创建一份,不管创建多少个对象,这个静态
的属性在内存中都只有一份
可以使用类名直接调用 ,所有的对象名也都可以调用,调用的是同一份
方法: 可以由类名直接调用 ,静态方法中不能使用这个类中对象属性
代码块: 静态代码块 只有在类加载使用时执行一次
Student.name = "
张三
";// Non-static field 'name' cannot be referenced from a
static context
最后输出的结果都是200
——final :
最终的 特性-不可变
类: 不能被继承 不能作为父类
属性: 常量: 初始化赋值之后不能改变值的
-对象成员属性: 对象成员常量
-静态属性变量: 静态常量
方法
:
不能被子类重写