一、封装的概述
封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想。
二、封装的实现
1.封装是指在定义一个类时,将类中的属性私有化,即使用private关键字来修饰。
2.私有属性只能在它所在类中被访问,如果外界想要访问私有属性,需要提供一些使用public修饰的公有方法。
例如:用于获取属性值的getXxx方法;
设置属性值的setXxx方法。
举例:封装一个Student类的对象,其中定义一个表示学生的类student,含"学号"、"班级"、"性别‘’、“”年龄域",以及"获得学号"、"获得性别"、"获得姓名"、"获得年龄"、"修改年龄"方法另加一个方法public String toString(),把Student类对象的所有属性信息组合成一个字符串,并有检验功能的程序实现。
代码实现:
package studenttest;
class Student
{
private int number;//定义学号
private String name;//定义姓名
private String sex;//定义性别
private int age;//定义年龄
public Student(int number,String name,String sex,int age)
{//构造方法,设定变量
this.number=number;
this.name=name;
this.sex=sex;
this.age=age;
}
public int getnumber()
{//返回学号
return number;
}
public String getname()
{//返回姓名
return name;
}
public String getsex()
{//返回性别
return sex;
}
public int getage()
{//获得年龄
return age;
}
public void reviseage(int age)
{//修改年龄
this.age=age;
}
}
public class StudentTest
{
public static void main(String[] args)
{//输出信息
Student stu=new Student(1,"张三","男",10);
System.out.println("学号:"+stu.getnumber()+"-"+"姓名:"+stu.getname()+"-"+"性别:"+stu.getsex()+"-"+"年龄:"+stu.getage());
stu.reviseage(12);
System.out.println("学号:"+stu.getnumber()+"-"+"姓名:"+stu.getname()+"-"+"性别:"+stu.getsex()+"-"+"年龄:"+stu.getage());
}
}
package studenttest;
class Student
{
private int number;//定义学号
private String name;//定义姓名
private String sex;//定义性别
private int age;//定义年龄
public Student(int number,String name,String sex,int age)
{//构造方法,设置变量
this.number=number;
this.name=name;
this.sex=sex;
this.age=age;
}
public String toString()
{//返回学号、姓名、性别、年龄
return "学号:"+number+"姓名:"+name+"性别:"+sex+"年龄:"+age;
}
public void reviseage(int age)
{//修改年龄
this.age=age;
}
}
public class StudentTest
{
public static void main(String[] args)
{//输出结果
Student stu=new Student(1,"张三","男",10);
System.out.println(stu.toString());
stu.reviseage(12);
System.out.println(stu.toString());
}
}
package studenttest;
class Student
{
int number;//定义学号
int class;//定义班级
String name;//定义姓名
String sex;//定义性别
int age;//定义年龄
public Student(int number,String name,String sex,int age)
{
this.number=number;
this.class=class;
this.name=name;
this.sex=sex;
this.age=age;
}
public Student()
{
this.number=1001;
this.class=1;
this.sex='F';
this.age=18;
this.name="TZSD";
}
public int getNumber()
{
return number;
}
public String getName()
{
return name;
}
public String getSex()
{
return sex;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age=age;
}
public String toString()
{//返回学号、姓名、性别、年龄
return this.name+" "+this.sex+" "+this.age+" "+this.number;
}
}
public class StudentTest
{
public static void main(String[] args)
{//输出结果
Student stu=new Student();
Student stu1=new Student(1005,2,'M',20);
System.out.println(stu.toString());
String str=stu1.toString();
System.out.println(str);
}
}
三、包
1.包是用来管理类文件的,在本质上与文件夹类似。
2.不同功能的类放在不同的包中。
3.包将类封装到了不同目录中。
4.同一个包中的类,可以直接用类名访问。
5.不同包中的类
(1)不同包中的类,可以使用包名.类名的形式来访问。
(2)不同包中的类,还可以用关键字import导入所在的包,这样就可以直接用类名访问。
6.常用的包
(1)Java.lang 包含java语言的核心类
(2)Java.awt 包含抽象窗口工具集
(3)Java.swing 包含用于管理可视化组件的类
(4)Java.net 包含与网络操作相关的类
(5)Java.io 包含提供多种输入、输出的类
(6)Java.util 包含一些使用工具类,如集合类等
四、访问权限控制
Java中,针对类、成员方法和属性提供了4种访问级别(private->default->protected->public)。
1.Private(类访问级别):表示私有的,被private修饰的成员,仅能包含该类的其他成员访问,任何其他类都不能访问,即private成员只能在类的内部使用。
2.Default(包访问级别):如果一个类或类的成员不使用任何访问控制修饰符,则称它为默认访问控制级别,这个类或类的成员只能被本包中的其他类访问。
3.Protected((子类访问级别):被protected修饰的类的成员,既可以被同一个包中其他类访问,也可以被不同包中的子类访问。protected比默认访问权限的访问范围要宽。
(protected=默认权限+不同包中的子类)
4.public(公共访问级别):是最宽松的访问级别权限,如果一个类或者类的成员被public访问控制符修饰,那么这个类或者类的成员能被所有的类访问,不管访问类和被访问类是否在同一个包中。
访问权限的设定(*表示可访问) | ||||
访问级别 | 同一个类 | 同一个包 | 不同包的子类 | 不同包非子类 |
private | * | |||
default | * | * | ||
protected | * | * | * | |
public | * | * | * | * |