面向对象语言特性之封装
来源:互联网 发布:em getsel vb 编辑:程序博客网 时间:2024/05/22 06:36
面向对象语言有三大特性:封装,继承,多态。
封装 (encapsulation),隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。
封装就是把类的一些信息隐藏起来,不允许外部程序直接访问,而是通过这个类提供的方法来实现对内部隐藏的信息的访问和操作。
一句话:什么是封装?封装就是隐藏内部实现,稳定外部接口,保护数据安全。
封装的好处显而易见:便于使用者正确使用,防止错误修改属性;松耦合,提高了系统独立性;提高了代码重用性。
封装的步骤
- 把属性用private修饰符修饰,成员变量只能在当前类中访问
- 设置public的setter和getter方法,供外部调用
- 使用public的方法访问
示例:
public class Person { //用private修饰属性 private String name; private int age; //设置setter和getter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}class Test{ public static void main(String[] args) { Person p = new Person(); //调用etter和getter方法访问属性 p.setName("张三"); p.setAge(18); System.out.println(p.getName()); }}
包
包是封装思想的一种体现。包的实质是一种访问控制机制。
包,使用package关键字,用来管理类文件,包的声明必须是在JAVA源文件的第一句非注释语句,一个源文件只能有一个包的声明语句。
使用包的好处:1,类似文件夹的概念,方便查找相应的类文件;2,防止命名冲突,在不同包中的类可以重名;3,在更广的范围内保护类、数据和方法。
package 包名; //例如 package cn.beida.javagroup.mypackage;
在当前包中访问其他包中的类,要先导入那个类所在的包,使用关键字import,
package只能有一句,但是import 可以有多句。
package cn.beida.javagroup.mypackage; import java.util.Scanner; import cn.beida.online.*; import cn.beida.animal.Dog;
同名不同包的类出现在同一个类中时,要用完整的包限定名来声明类
com.oop.Dog dog1 = new com.oop.Dog();com.oop.pet.Dog dog2 = new com.oop.pet.Dog();
访问权限控制
类的访问修饰符有两个,public 和 默认修饰符;public 修饰的类在不在同一个包中都可以访问;默认修饰符修饰的类只能在同包中访问。(默认修饰符就是类名前什么也不写)
public class Person{ //public 修饰的类}class Student{ //默认修饰符修饰的类}
类的成员访问修饰符有四个,用来修饰成员变量和成员方法:
static修饰符
static 用来修饰成员变量和成员方法,使用static修饰的属性和方法属于类,可以通过类名加“.”直接调用,(也可以通过实例访问,但不建议)。
使用static修饰的变量叫做静态变量;
使用static修饰的方法叫做静态方法;
使用static修饰的代码块叫做静态代码块;
静态变量或静态方法,静态代码块位于JVM的方法区,当JVM加载类时,会把静态区一起加载到内存中去。当main方法里的语句还没执行时,静态区的代码已经执行完了。
静态变量
也叫做类变量,在内存中只有一个拷贝;在类的内部可以直接访问,在其他类中通过类名访问;
而实例变量是通过实例访问,每创建一个实例,就会为实例变量分配一次内存。
静态变量会在编译期间系统自动初始化并赋默认值为0;静态变量的好处是能被所有实例共享,如果类的所有实例包含一个相同的常量属性,可以把这个属性定义为静态常量类型,从而节省内存,如:static final PI = 3.14;
。
注意:静态变量只能定义在类里,不能定义在方法里。
静态方法
静态方法由类名直接调用;不能直接访问实例变量和实例方法,只能访问静态变量和静态方法;静态方法必须被实现;静态方法中不能有this或super;
实例方法由实例调用,可以访问静态变量,静态方法,实例变量,实例方法。
静态代码块
JVM加载类时加载静态代码块,如果有多个静态块,就按顺序加载,每个静态块只会被执行一次。
示例:
public class Vote { //static修饰属性 private static int count; //投票数, 所有人都会改变同一个数 private static final int MAX_COUNT = 100;//最大投票数, private String name;//投票人的姓名 //构造方法 public Vote(String name){ this.name = name; } //投票方法 public void voteFor(){ if(count == MAX_COUNT){ System.out.println("投票结束"); }else{ System.out.println("谢谢 "+this.name+" 的投票"); count++; } } //static 修饰方法 public static void printResult(){ System.out.println("投票总数是"+count); }}public class VoteTest { public static void main(String[] args) { Vote v1 = new Vote("jim"); Vote v2 = new Vote("jane"); v1.voteFor(); v2.voteFor(); for(int i = 1; i < 99; i++){ Vote v = new Vote("v"+i); v.voteFor(); } Vote v3 = new Vote("tom"); v3.voteFor(); //静态方法用类名来调用 Vote.printResult(); }}
- 8.面向对象语言特性之封装
- 面向对象语言特性之封装
- 面向对象特性之封装
- 第三天面向对象之封装特性
- 面向对象三大特性之封装
- 面向对象三特性之【封装】
- 面向对象三大特性之封装
- Java面向对象四大特性之封装
- 面向对象特性-封装
- 黑马程序员_OC语言之面向对象的三大特性(封装、继承、多态)
- 黑马程序员——OC语言基础——面向对象三大特性之封装
- 面向对象语言Objective-C三大特性之一--封装
- 面向对象语言特性之继承
- javaSE-面向对象-封装特性
- 面向对象的特性:封装
- 面向对象特性之一封装
- 面向对象封装的特性
- PHP面向对象特性-封装
- 类、对象、方法
- 语义分析之一:属性文法
- 货物运输
- List中 remove 方法总结.md
- hadoop的分组实现
- 面向对象语言特性之封装
- 状压DP
- UVA
- BP神经网络(三)——公式推导
- MAC上PyCharm调试Tensorflow的环境安装与配置
- CENTOS 7 安装网易云音乐
- 咸鱼日记12.10——maven
- 在linux中怎么让进程开机自动启动?
- CSS3(七)