java封装是什么?
在面向目标程式设计办法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的完成细节部份包装、躲藏起来的办法。
封装能够被认为是一个维护屏障,防止该类的代码和数据被外部类界说的代码随机拜访。
要拜访该类的代码和数据,有必要经过严厉的接口操控。
封装最主要的功用在于咱们能修正自己的完成代码,而不必修正那些调用咱们代码的程序片段。
恰当的封装能够让程式码更简略了解与维护,也加强了程式码的安全性。
封装的长处
1. 杰出的封装能够削减耦合。
2. 类内部的结构能够自在修正。
3. 能够对成员变量进行更准确的操控。
4. 躲藏信息,完成细节。
Java面向目标的封装
封装是Java面向目标的三大特性之一,一般咱们是经过包管理机制一起对类进行封装,躲藏其内部完成细节,一般开发中不允许直接操作类中的成员特点,所以特点一般设置为私有权限private,类中一般会给出一些公共办法来让运用者经过特定办法读取或许操作里边的数据,防止误操作然后确保了数据的安全。
封装过程一般分为3步,第一步首要修正特点的可见性,即将其设置为private;第二步创立getter/setter办法,用于获取/设置特点值,便是用来读写特点,eclipse中也供给了直接生成变量操作办法的菜单,挑选菜单中的Source-》Generate Getters and Setters.。。体系就会自动识别特点,咱们能够挑选创立;第三步是在getter/setter办法中参加特点操控,操控传入参数的合法性,确保数据安全。
简略示例如下:
public class Hello {
private float screen;
private float width;
private float height;
public float getScreen(){
return screen;
}
public void setScreen(float screen){
screen = screen;
}
}
那么咱们读写Hello中screen特点是,能够运用咱们界说的getScreen和setScreen来进行读和写,这就简略的完成的封装
当然咱们在其他办法中也能够对需求的特点进行修正,可是咱们专门用于完成读写逻辑时运用getter/setter办法是一个约定俗成的编程习气
拜访修饰符
前面的拜访修饰符除了private和public之外,还有protected,还能够什么都不写,他们的权限联系如下图所示:
咱们一般对类内部的特点运用private,这个特点维护最强,维护最弱的便是public特点,最常用的特点也便是public和private,拜访修饰符一般放在成员最前面。
this关键字
上面的实例中,setScreen办法中的赋值句子,我么运用了screen = screen;这样尽管没什么过错,但编译器会给出正告,原因是办法参数和成员特点名相同,有或许导致混杂,为了区别本类中的特点和参数咱们一般运用this关键字,即this.screen = screen;一般办法调用本类中的办法名除了直接写办法之外引荐运用this.func();这种方式调用本类中的办法
Java内部类
Java内部类便是界说在一个类内部的类,包含这个内部类的类就称为外部类
内部类能够完成更好的封装,把内部类躲藏在外部类之中,同一个包中也无法运用
内部类的办法能够直接拜访外部类的一切特点,包含私有的
内部类完成的一切功用单类都能够完成,仅仅有些时分有了内部类更便利一些
内部类分为:成员内部类、静态内部类、办法内部类、匿名内部类
1、成员内部类
成员内部类也便是一般内部类,能够直接拜访外部类中的一切成员,不必忧虑任何权限问题;
可是外部办法不能直接拜访成员内部类中的特点或许办法,比方外部类名HelloWorld,内部类名Inner,外部类办法拜访内部类成员的办法为:
HelloWorld he = new HelloWorld();
Inner in = he.new Inner();
或许直接用
Inner in = HelloWorld.new Inner();
然后经过in.特点/办法,就能够拜访成员内部类了,当编译程序后,会生成2个class文件,一个是内部类生成的,一个是外部类生成的
外部类编译文件名为:HelloWorld.class 留意内部类编译文件名为:HelloWorld$Inner.class
别的内部类和外部类具有相同的成员变量和办法的时分,内部类依据就近准则优先拜访自己类中的成员,要想拜访外部类中的,需求运用this.成员来完成
2、静态内部类
静态内部类不能像成员内部类相同直接拜访外部类中的非静态成员,能够经过new 外部类()。成员来完成拜访
静态内部类拜访外部类静态成员能够直接运用成员名来拜访,重名的话运用下一句的办法拜访
假如外部类静态成员和内部类成员重名(留意不仅仅是静态成员),那么能够直接拜访内部成员,外部静态成员拜访运用 类名。成员 来拜访
在外部类中创立静态内部类的目标时,不需求成员内部类那样需求先实例化外部目标,能够直接 内部类 目标名 = new 内部类();来创立内部类的目标
3、办法内部类
办法内部类,便是内部类的界说方位是在外部类的办法中,这个不必考虑太杂乱,办法内部类只在该办法内部可见,所以一句话只能在办法内部运用
办法内部运用很简略,直接用 内部类 目标名 = new 内部类();就能够拜访内部类成员了
由于办法内部类不能在所属办法以外任何地方拜访,因而办法内部类不能运用拜访操控符和staTIc关键字,简略的写法如下:
public class Hello {
public void show(){
//界说办法内部类,不加任何修饰符
class MInner{
//办法内部类成员,需求加拜访修饰符
int a = 3;
public int getA(){
return a + 6;
}
}
//创立办法内部类目标
MInner mi = new MInner();
//调用办法内部类办法
int score = mi.getA();
System.out.println(“调用成果:” + score);
}
public staTIc void main(String[] args){
//测验办法内部类
Hello mo = new Hello();
mo.show();
}
}
经过这个比如,就简略看出办法内部类的运用了
4、匿名内部类
匿名内部类便是没有姓名的内部类,只能运用一次,一般连贯起来,用来简化代码的书写,匿名内部类有必要承继一个父类或许完成一个接口,后边记载面向目标的承继和多态的时分会说到,这儿就不细说了