面向对象编程(二)

目录

一、静态变量和静态函数

1. 静态变量

2.静态函数

二、封装(Encapsulation)

1. 概念

2. 封装的优点

3. 封装的实现

三、包(package)

1. 包的引入

2. 什么是包?

3. java中使用包的好处

4. 包的创建和导入

四、访问控制修饰符

1. 类的访问控制修饰符

2. 成员的访问控制修饰符

五、类中类

1. 概念

2. 内部类的优点


一、静态变量和静态函数

1. 静态变量

1.1 概念

在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有。

        静态成员不依赖于类的特定实例,被类的所有实例共享,就是说 static 修饰的方法或者变量不需要依赖于对象来进行访问,只要这个类被加载,Java 虚拟机就可以根据类名找到它们。

1.2 调用静态成员的语法结构:

类名.静态成员

注意:

  • static修饰的成员变量和方法,从属于类;
  • 普通变量和方法从属于对象;
  • 静态方法不能调用非静态成员,编译时会报错。
  • 从底层上讲,静态变量在类被载入时创建,只要类存在,静态变量就存在。

1.3 静态变量的应用

        (1)保存跨对象信息

        例:登录QQ时,在登陆界面输入账号、密码,单击“登录”,若登录成功,则到达聊天界面。

 

        聊天界面如何知道登录界面的账号?

        我们可以定义一个类,使用静态变量保存账号,代码如下:

class Conf{
    static String loginAccount;
}

        在登陆界面,若登录成功,账号将存入Conf.loginAccount。在聊天界面,访问Conf.loginAccount即可得到登录的账号。

        (2)存储对象个数

        保存一个类已经实例化的对象个数。

2.静态函数

2.1 概念

        在普通函数的定义前加上关键字static,则称该函数为静态函数,也叫静态方法。

        方法是一组变量和语句,它们作为一个逻辑单元一起发挥作用。像字段一样,方法可以有修饰符(如私有、公共或静态)。方法也有一个返回类型(如果该方法什么都不返回,则可能是无效的)。返回类型可以是引用类型(如对象或数组)。一个方法可以有任意数量的参数或参数。

2.2 静态函数的属性

  • 它只能访问静态成员。
  • 它可以在没有实例的情况下调用。
  • 它不与对象关联。
  • 静态函数不能访问非静态数据成员。

2.3 静态函数的声明

        函数有函数原型和函数两部分。

        函数原型包含函数签名,其中包括函数名称、返回类型、访问说明符和参数列表。

        函数体包含要执行的逻辑或功能。

        语法结构

访问权限类型 static 函数返回类型 函数名(参数列表){
    函数成员;
}

2.4 静态函数的调用 

语法结构

类名.函数名

注意: 

        ① 静态方法不能使用非静态数据成员或直接调用非静态方法。

        ② thissuper关键字不能与静态上下文一起使用。

二、封装(Encapsulation)

1. 概念

        封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

2. 封装的优点

(1)封装避免了命名冲突的问题,具有隔离作用,不同的类中可以有相同名称的方法和属性,但不会混淆,也可以减少耦合(比如实现界面和逻辑分离);

(2)可以让类对外接口不变,内部可以实现自由的修改;

(3)从安全性考虑,封装使对代码的修改更加安全和容易,封装明确的指出了哪些属性和方法是外部可以访问的;

(4)因为封装的类功能相对独立,因此能更好的实现代码复用

(5)从设计角度来讲,封装可以对外屏蔽一些重要的信息。

3. 封装的实现

        (1)将不能暴露的成员隐藏起来,不让其在类的外部被直接赋值。实现方法是将该成员定义为私有的,在成员定义前加上修饰符private。

        (2)用公共方法暴露对该隐藏成员的访问,可以给函数加上修饰符public,将该方法定义为公共的。 

三、包(package)

1. 包的引入

        在本课程中不乏会出现一些代码,而这些代码各自占有一个.java文件,大量的文件堆积后显得十分混乱,这时为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

2. 什么是包?

        在Java中,包是一种封装一组类、子包和接口的机制,可用于组织一组相关的类和接口。

       从概念上讲, 包类似于计算机操作系统中的文件管理。

3. java中使用包的好处

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

        (2)如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免命名冲突。

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

4. 包的创建和导入

        4.1 包的创建

package 包名;//声明必须放在第一行

         如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中。

        4.2 包的导入

        为了能够使用某一个包的成员,我们需要在 Java 程序中使用 "import" 语句导入该包。

        在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:

import package1[.package2…].(classname|*);

四、访问控制修饰符

访问控制符是一组限定类、属性或方法是否可以被程序里的其他部分访问和调用的修饰符。

1. 类的访问控制修饰符

1.1 定义类时的访问控制符:

        public或 默认。类只有这两种访问控制符。

        如果为public类,则该类可以被其他类所访问。
        如果为 默认 类,则该类只能被该包中的类所访问。

1.2 方法与变量的访问控制符

作用范围|   |访问控制符publicprotected默认(包可访问)private(私有)
同一个类中
同一个包中
不同包中的子类
不同包中的非子类

(1)private

        用 private 修饰的类成员,只能被该类自身的方法访问和修改,而不能被任何其他类(包括该类的子类)访问和引用。因此,private 修饰符具有最高的保护级别。

(2)friendly(默认)

        如果一个类没有访问控制符,说明它具有默认的访问控制特性。这种默认的访问控制权规定,该类只能被同一个包中的类访问和引用,而不能被其他包中的类使用,即使其他包中有该类的子类。

(3)protected

        用保护访问控制符 protected 修饰的类成员可以被三种类所访问:该类自身、与它在同一个包中的其他类以及在其他包中的该类的子类。使用 protected 修饰符的主要作用,是允许其他包中它的子类来访问父类的特定属性和方法,否则可以使用默认访问控制符。

(4)public

        当一个类被声明为 public 时,它就具有了被其他包中的类访问的可能性,只要包中的其他类在程序中使用 import 语句引入 public 类,就可以访问和引用这个类。

2. 成员的访问控制修饰符

1.1 定义成员时的访问控制符:

private、default、protected、public。

1.2 特性

(1)private:成员只能在定义它的类的内部被访问。
(2)default:成员可以在定义它的类的内部被访问,也可以被这个包中的其他类访问。
(3)protected:成员可以在定义它的类的内部被访问,也可以被这个包中的其他类访问,还可以被包外的子类访问。
(4)public:成员可以在定义它的类的内部被访问,也可以被包内、包外的所有其他类访问。
从开放的程度上讲,private<default<protected<public。

五、类中类

1. 概念

        在一个类内部进行其他类结构的嵌套操作,也叫内部类。

2. 内部类的优点

  • 内部类与外部类可以方便的访问彼此的私有域(包括私有方法、私有属性)。
  • 内部类是另外一种封装,对外部的其他类隐藏。
  • 内部类可以实现java的单继承局限。

 注意:

  • 内部类中的成员只在内部类范围内才能使用,外部类不能像使用自己的成员变量一样使用它们。
  • 如果在内部类中使用 this ,仅代表内部类的对象,因此也只能引用内部类的成员。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lesret

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值