在java中封装到底是指什么呢?

其实封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

好处:1将变化隔离。

        2便于使用。

        3提高重用性。

        4提高安全性。

封装原则:1将不需要对外提供的内容都隐藏起来。

                2把属性都隐藏,提供公共方法对其访问。

其实java中的函数就是最小的封装。

那么我们该怎么实现封装呢?我们举一个例子。

class Person
	{
		int age;
		void speak( )
		{
			 System.out.println("age="+age);
		}	 
	}				
class PersonDemo
 	 {
        	public static void main(String[ ] args)	
        	{
        		Person p=new Person();
        		p.age=20;
        		p.speak();
		}
	}

这个代码是一个简单的代码,运行是可以运行的,结果如图。                                                                                        

java 封装同一个方法不同参数 java封装函数_封装

但是大家有没有发现一个问题,当我们输入-20的时候运行结果肯定是-20,没问题的。但是-20与我们现实生活中的常识相违背。出现这种情况的原因是age建立对象后被直接访问到了,如果直接访问就会出现安全隐患,那么我们能不能把这个age隐藏起来不让你访问就可以了,我们可以用一个修饰符来修饰,private。

private:私有,权限修饰符,用于修饰类中的成员(成员变量,成员函数)。私有只在本类有效。

我们在int age前面加一个private试一试。

java 封装同一个方法不同参数 java封装函数_java_02

我们可以看到是运行错误的。这个说明了这个age只能在Person中访问。

那么把它私有了我们该怎么访问,我们封装提供了安全性但是应该要提供一种方法来访问。

将age私有化之后,类以外即使建立了的对象也不能直接访问了,但是人应该有年龄,那么就需要在Person类中应提供访问age的方式。

我们可以这样写这个代码。

class Person
	{
		private int age;
		public  void setAge(int a)
		{ 	
			age=a;
		}		
		void speak( )
		{
			 System.out.println("age="+age);
		}	 
	}				
class PersonDemo
 	 {
        	public static void main(String[ ] args)	
        	{
        		Person p=new Person();
        		p.setAge(20);
        		p.speak();
		
		}		
	}

运行结果是一样的跟之前的。我们就是对外给了一种方法。对外提供了函数。之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码的健壮性。当然我们这时候输入-20他还是可以输出-20的。所以我们在里面加一个判断语句。

class Person
	{
		private int age;
		public  void setAge(int a)
		{ 	
			if(a>0&&a<120)
			{
				age=a;
				speak();
			}
			else
				System.out.println("feifa age");
			}		
		void speak( )
		{
			 System.out.println("age="+age);
		}	 
	}				
class PersonDemo
 	 {
        	public static void main(String[ ] args)	
        	{
        		Person p=new Person();
        		p.setAge(-20);
        		p.speak();
		
		}		
	}

这个时候我们再运行一下。

                                

java 封装同一个方法不同参数 java封装函数_java 封装同一个方法不同参数_03

 

可以看出来他判断出-20是feifa age。并且输出0。

这就是今天所说的封装和private。大家可以自己多练习去掌握。