zoukankan      html  css  js  c++  java
  • Java面向对象之封装

    封装是Java面向对象的另一大特性,它是指将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供得方法来实现对隐藏信息的操作和访问。




    为什么要封装?

    **1. **只能通过特定的方法来访问数据,让数据更好的被保护,增加了数据的安全性。

    **2. **隐藏类的实例细节,方便修改和实现。


    怎么实现封装?

    **1. **修改属性的可见性:想要把数据隐藏起来,就要限制数据的可见性,所以要先把想隐藏的属性用private修饰,限制其只能被本类成员直接访问。

    **2. **提供访问属性的方法:外部程序无法直接访问隐藏的属性,所以要提供一个可以让外部程序访问私有属性的方法。一般通过get和set两个方法分别实现对私有属性的读和写。方法名通常是get或set加上属性名,具体格式为:

    • public type getAttibuteName([参数1,参数2……]),其中type是返回的属性值类型,attributeName是属性名,括号里的参数是可选的。

    • public void setAttibuteName([参数1,参数2……]),其中attributeName是属性名,括号里的参数是可选的。


    Java中的访问修饰符

    Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限:

    1. 默认的,也称为 default,在同一包内可见,不使用任何修饰符。

    2. 私有的,以 private 修饰符指定,在同一类内可见。

    3. 共有的,以 public 修饰符指定,对所有类可见。

    4. 受保护的,以 protected 修饰符指定,对同一包内的类和所有子类可见。

    其修饰的属性可见性如下表所示:

    访问修饰符 本类 同包 子类 其他
    private
    default
    protected
    public

    Java中的包

    简单地说包就是用来管理类的,就类似文件夹一样。我们整理文件时可以把一些文件放到同一个文件夹里进行管理,同样的,我们可以把一些类文件放到同一个包中进行管理。

    1. 包的作用:

    • 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

    • 解决文件同名冲突,跟文件夹类似。

    • 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

    2. 包的定义:

    包用package 包名来定义,包的声明必须放在第一行,包名用全小写英文字母表示,中间可用“."隔开,用以区分层次,类似文件夹路径中的“”。例如:在Blogs.java文件里定义一个包名为cnblogs.com的包,包里面有个Blogs类:

    Blogs.java

    package cnblogs.com;     //包的声明,放在第一行
    
    public class Blogs
    {
      public void toPostBlogs()
      {
           System.out.println("This is a new blog.");
      }
    }
    

    3. 包的使用:

    包可以通过import关键字导入,从而在某个文件中使用另一个文件中的类,格式为import 包名.类名,如import cnblogs.com.Blogs。也可以用import 包名.*导入某个包里的所有类。就好像我们在使用系统里的一些类一样,比如使用Scanner类,要在最前面添加一句>import java.util.Scanner或者java.util.*,因为Scanner就是java.util包下的一个类。


    Java的内部类

    顾名思义,内部类( Inner Class )就是定义在另外一个类内部的类。与之对应,包含内部类的类被称为外部类(Outer Class)。内部类分为:成员内部类、静态内部类、方法内部类、匿名内部类。
    1. 内部类的主要作用:

    • 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。

    • 内部类的方法可以直接访问外部类的所有数据,包括私有的数据。

    • 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。

    2. 成员内部类:

    成员内部类也叫普通内部类,使用方法如下:

    • Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等。

    • Inner 类中定义的方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,包括直接访问 Outer 类中的私有属性。

    • 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( )

    3. 静态内部类:

    静态内部类是 static 修饰的内部类,这种内部类的特点是:

    • 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

    • 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

    • 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

    4. 方法内部类:

    方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。




  • 相关阅读:
    C/S和B/S结构区别整理
    JavaScript特点、优缺点及常用框架
    ExtJs特点、优缺点及注意事项
    Oracle SQL 脚本跟踪
    解决 C#中 SQL脚本执行超时 问题
    oracle 时间转化函数及常见函数 .
    Spring.NET 1.3.2 集成 NHibernate 3.2 1 下载软件
    SQL Server 跨服务器 不同数据库之间复制表的数据的方法:
    spring.net nhibernate 分布布式事务(上)
    set xact_abort ON 你懂的, 在分布式数据库事务中,用到. 在事务中,若出现错误,系统即默认回滚事务
  • 原文地址:https://www.cnblogs.com/jiuweilinghu/p/7244540.html
Copyright © 2011-2022 走看看