3.4. 封装与访问修饰符

一. 面向对象的封装性

1. 封装的好处:

  • 1、封装之后,对于那个事物来说,看不到这个事物比较复杂的一面,只能看到该事物简单的一面。复杂性封装,对外提供简单的操作入口。照相机就是一个很好的案例,照相机的实现原理比较复杂,但是对于使用照相机的人来说,操作起来是非常方便的。还有像电视机也是封装的,电视机内存实现非常复杂,但是对于使用者来说不需要关心内部的实现原理,只需要会操作遥控器即可。


  • 2、封装之后会形成真正的“对象”,真正的“独立体”。


  • 3、封装就意味着以后的程序可以重复使用。并且这个事物应该适应性比较强,在任何场合都可以使用。【可重用性】


  • 4、封装之后,对于事物本身,提高了安全性【安全级别高】


2. 封装的步骤:

1、所有属性私有化,使用 private 关键字进行修饰,private 表示私有的,修饰的所有数据只能在本类中访问

2、对外提供简单的操作入口,也就是说外部程序要想访问 age 属性,必须通过这些简单的入口进行访问:

  • 对外提供两个公开的方法,分别是 set 方法和 get 方法
  • 想修改 age 属性,调用 set 方法
  • 想读取 age 属性,调用 get 方法

3、set 方法的命名规范:public void set + 属性名首字母大写(形参){ };

public  void setAge(int a){ 
    age = a; 
}

4、get方法的命名规范:public 返回值类型 get + 属性名首字母大写(形参){ };

public int getAge(){
    return age;
}

5、需要背会的:

  • setter和getter方法没有static关键字
  • 有static关键字修饰方法怎么调用?类名.方法名(实参);
  • 没有static关键字修饰方法怎么调用?引用.方法名(实参);

例:

public class UserTest
{
    public static void main(String[] args){
        User user =new User();
        //编译报错,age属性私有化,在外部程序中不能直接访问
        //从此之后age属性非常的安全,但是有点太安全了。
        //对于目前程序来说,age属性彻底在外部访问不到了。
        //System.out.println(user.age);
       
       //修改
       user.setAge(-100);//对不起,您提供的年龄不合法
       //读取
       System.out.println(user.getAge());//0
    }
}
public class User
{
    //属性私有化
    private int age;
}

public  void setAge(int a){ 
    //编写业务逻辑代码进行安全控制
    //age = a; 
    
    if(a<0||a>150){
        System.out.println("对不起,您提供的年龄不合法");
        return;
    }
    //程序可以进行到这里的话,说明a是合法的,则进行赋值运算
    age = a; 
}

public  int getAge(){
    return age;
}

二. 包和import

1. 关于 java 语言当中的包机制:

  • 1、包又称为 package, java 中引入 package 这种语法机制主要是为了方便程序的管理。
    不同功能的类被分门别类放到不同的软件包当中,查找比较方便,管理比较方便,易维护。


  • 2、怎么定义 package 呢?
    在 java 源程序的第一行上编写 package 语句。
    Package 只能编写一个语句.
    语法结构:
    Package 包名;


  • 3、包名的命名规范:
    公司域名倒序+项目名+模块名+功能名;
    采用这种方式重名的几率较低。因为公司域名具有全球唯一性。
    例如:
    Com. Bjpowernode . Oa. User . Service;
    Org . Apache. Tomcat. Core ;


  • 4、包名要求全部小写,包名也是标识符,必须遵守标识符的命名规则


  • 5、一个包对应的是一个目录


  • 6、使用了 package 机制之后,应该怎样编译?怎么运行呢?
    使用 package 机制后,类名不在是 Test ,而是包名. 类名


package com.bjpowernode;

public class Test1()
{
    public static void main(String[] args){
        
        //创建Test对象
        //以下代码编译错误:当省略包名之后,会在当前包下找Test
        //实际上编译器去找:com.bjpowernode.Test了,这个类不存在。
        //Test tt = new Test();
        //System.out.println(tt);

        //修改以上错误
        //包名不要省略
        //结论:什么时候前边的包名可以省略呢? Test和Test1在同一个包下的时候不需要加包名。
        com.bjpowernode.javase.day.Test tt = new com.bjpowernode.javase.day.Test();

    }
}

2. import

1、import 语句用来完成导入其他类,同一个包下的类不需要导入,不在同一个包下需要手动导入。

2、import语法格式:
import 类名;
import 包名.* ;

package com.bjpowernode;
import com.bjpowernode.javase.day.Test; //导入包

public class Test2()
{
    public static void main(String[] args){
        Test x = new Test();
        System.out.println(x);//com.bjpowernode.javase.day.Test
    }
}

3、*_java.lang._不需要手动引入,系统自动引入
lang:language语言包,是java语言的核心类,不需要手动引入。

String s ="abc";
System.out.println(s);

//Date d = new Date();//编译错误,因为没有Date类
需要 import java.util.Date;

4、什么时候需要 import?

  • 不是 java. Lang 包下,并且不在同一个包下的时候,需要使用 import 进行引入

三. 访问控制权限

访问控制权限修饰符 :

1、访问控制权限修饰符来控制元素的访问范围

2、访问控制权限修饰符包括:

  • Public: 表示公开的,在任何位置都可以访问
  • Protected: 同包,子类
  • 缺省 default(系统默认状态): 同包
  • Private: 表示私有的,只能在本类中访问

3、访问控制权限修饰符可以修饰类、变量、方法…

4、当某个数据只希望子类使用,使用 protected 进行修饰

5、修饰符的范围: Private < 缺省 < protected < public

6、类只能采用 public 和缺省的修饰符进行修饰【内部类除外】

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇