【Java】面向对象的特征之一:封装(上)

目录

一、封装

1.什么是封装?

2.如何实现封装?

1.实现封装

2.访问封装中的内容

3.访问限定符

访问限定符:管当前修饰的字段或方法的访问权限

访问限定符有哪些?

4.包

1.什么是包?

2.导入包中的类 

1.相同包不同类

2.如果在不同的包中有相同的类的情况:

3.不同包的使用的相互使用:

3.自定义包


一、封装

1.什么是封装?

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开的接口和对象进行交互(对类进行包装,将一些细节隐藏起来,提供一些公开访问的东西就可以)。可以类比成一个手机,你只能看到外壳包装,确看不到内部元件的构成。

2.如何实现封装?

1.实现封装

java中主要通过访问权限来实现封装

  • 类可以将数据以及封装数据的方法结合在一起
  • 访问用来控制方法或者字段能否直接在类外使用

  • 不让别人知道就使用private,而被private修饰的成员变量或成员方法只能在当前类中被访问,其他类不能访问;
  • public就是都可以访问;
  • public和private都是访问限定符;

2.访问封装中的内容

如果被private修饰了只能在当前的类中使用,在其他类中无法使用,如果我想在其他类中使用怎么办?

代码如下:

class Cat{
    private String name;
    private int age;
    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name=name;
    }
    public int getAge(){
        return this.age;
    }
    public void setAge(int age){
        this.age=age;
    }
  public void fun(){
      mew();
  }
    private void mew(){
        System.out.println("喵喵叫~");
    }
        }
public class Test {
    public static void main(String[] args) {
          Cat cat=new Cat();
          cat.setName("小白");
          cat.setAge(3);
          cat.fun();
    }
}

既然private只能在被当前类中使用,那么我们可以在当前类中使用成员方法来访问被private的成员变量或成员方法。

为什么被封装了还要在进行访问?

 

拿上面的图举例,我要实现如果有一个变量a,a等于1的时候,才能打印出喵喵叫这个结果,但我不想要让别人看到他是如何运行才得到的结果,只要别人要到这个结果就好,所以我要把这个具体的时候过程隐藏起来。 

3.访问限定符

访问限定符:管当前修饰的字段或方法的访问权限
访问限定符有哪些?

理解:

private:私有的,只有自己能知道,其他人不知道;

default:只有自己家里人知道,其他人不知道;

public:公开的,所有人都能看到;

protected:继承中会讲到。

他们范围中的包的是什么?

4.包

1.什么是包?

包:为了更好的管理类,把多个类收集在一起,成为软件包。同一个类也可以根据不同属性再次进行组合。包的本质就是文件夹。 

常见的包

  •  java.lang:系统常用的基础类(String、Object);
  • java.lang.reflect:java反射编程包;
  • java.net:进行网络编程开发包;
  • java.sql:进行数据库开发的支持包;
  • java.util:是java提供的工具程序包;(非常重要
  • java.io:l/O编程开发包。

2.导入包中的类 

1.相同包不同类
  public static void main(String[] args) {
        int[] array={1,2,3,4};
    }

java中已经提供了很多现成的类供我们使用,如果我们要打印这个数组,我们可以借助工具类Arrays来,我们可以将Arrays写出来来确定Arrays在哪一个包中。

我们要使用这个类就要将他们的路径写出来。

  • 推荐第一种,第二种写的有点长

  

  • 推荐第一种:指定导入的类名,为什么?
2.如果在不同的包中有相同的类的情况:

  • 如果遇到相同类不同包,java.util.*这样写法无法使用 ;
  • 你使用的时候也不知道使用的是这个包的哪一个类 ; 

也可以使用import static导入包中的静态的方法和字段 

import static java.lang.Math.*;
public class Test4 {
    public static void main(String[] args) {
        double x=23;
        double y=53;
        //double result=Math.sqrt(Math.pow(x,2)+Math.pow(y,2));
        double result=sqrt(pow(x,2)+pow(y,2));
    }
}

  • 这种一般不写
3.不同包的使用的相互使用:

Test2和Test_0716这两个类是在不同包底下的不同类。如果我要在Test_0716中使用Test2.java中的方法,应该怎么做?

  • 首先在Test_0716类中写出Test2,编译器会自动显示,Test2在那个包下,点击,会自动声明

  • 其次就是进行类的实例化以及使用和平常没有区别

3.自定义包

步骤:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值