面向对象 第一节 类的封装与继承
一、类
1.什么是类
- 类: 是一组具有相同属性和行为的事物的集合,本质还是一种数据类型,类是抽象的
类是由抽象出的属性和行为组成的对一种实物的描述,
实物的属性是类的成员变量,实物的行为是类的方法 - 属性: 事物的静态的特征, (成员变量)
行为: 事物的动态的特征(方法,动作)
2.如何创建类
创建一个Test类
声明一个变量,name
声明一个方法,remidnd()
public 返回值类型 方法名() {
//这里编写方法的主体
}
二、 对象
1.什么是对象
现实世界中任何物体都能被当作是对象,不过在正常开发的时候通常只是在一定的范围去考虑和认识与系统相关的事物并用系统中对象抽象的表示他们
2.对象的特征
面向过程:C语言,以方法为中心,主要是方法之间的调用
面向对象:更符合人类的思维习惯,以对象为中心,主要是对象之间的调用
3.对象的创建
创建对象
类名 对象名 = new 类名();
Test t = new Test();
引用对象成员:使用“.“进行以下操作
引用类的属性:对象名.属性
引用类的方法:对象名.方法名()
4.类和对象之间的关系
类是物体属性和行为的模板
对象是物体的具体实现
三、封装
1.什么是封装
- 在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
- 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
- 要访问该类的代码和数据,必须通过严格的接口控制。
- 封装:是面向对象的三大特征之一,
- 隐藏对象的属性和实现细: 将我们的成员变量私有化,修饰符为private
- 仅对外提供公共访问和修改方式: 给我们的成员变量提供公共访问方式,getXXX() setXXX()
- set属性(): 用来设置属性值的方法
- get属性(): 用来获取属性值的方法
2.封装的作用
- 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
- 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
3.封装的优点
- 减少耦合:良好的封装能够减少耦合,提高系统独立性
- 可重用性:封装重复代码,提高软件的可重用性
- 精确控制:可以对成员变量进行更精确的控制
- 安全性:隐藏信息,实现细节,降低了构建大型系统的风险
4.实现封装的步骤
- 封装使用的步骤:
1.成员变量私有化 private
2.提供公共访问方式 getXXX() setXXX()
public class Person{
private String name;
private int age;
}
- 这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
—— 关键字 private
public class Person{
private String name;
private int age;
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age= age;
}
}
-
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
-
访问修饰符:
1.default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法
2.private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
3.public : 对所有类可见。使用对象:类、接口、变量、方法
4.protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类) -
常用的非访问修饰符
1.static 修饰符,用来修饰类方法和类变量
2.final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的
3.abstract 修饰符,用来创建抽象类和抽象方法
4.synchronized 修饰符,主要用于线程的编程,synchronized 关键字声明的方法同一时间只能被一个线程访问。synchronized 修饰符可以应用于四个访问修饰符
5.volatile 修饰符,volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。