Java中类的特性

2021-03-31  本文已影响0人  Still_Climbing

1. 访问控制

私有成员:
通过关键字 private 来声明。无法从类的外部访问到私有成员,只能被该类自身访问和修改。即使是该类的子类也无法对私有成员进行获取或引用,从而达到了对数据最高级别保护的目的。

公有成员:
通过关键字 public 来声明。公有成员可以被所有其他的类所访问,会造成安全性和数据封装性的下降,应尽量减少使用。

保护成员:
通过关键字 protected 来声明。被保护的成员只能够被它自己所在的类及其子类或同一包中的其他类访问,在子类中可以覆盖此变量。

缺省访问控制符:
若类的成员前面不加任何访问控制符,则其具有缺省的访问控制特性。该控制权表示这个成员只能被同一个包(类库)中的类所访问和调用。同理,对于一个类来说,如果它没有访问控制符,则它也只能被同一个包中的类访问和引用。

2. 方法重载 (Overloading)

重载是实现多态的一种方法,这些方法具有相同的名称,但是形参不同。方法的重载中参数的类型是关键,参数列表必须不同。这里的的不同分为以下情况:

3. 构造方法

构造方法是一种特殊的、与类名相同的方法,专门用于在创建对象时,完成初始化工作。构造方法有如下特殊之处:

3.1 从一个构造方法调用另一个构造方法

3.2 私有构造方法

构造方法一般都是共有的,如果构造方法被声明为 private ,则无法在该构造方法所在的类以外的地方被调用,但在该类的内部还是可以被调用的。

4. 静态成员

static 关键字修饰的成员被称为静态成员,也成为类成员;不被修饰的成员叫做实例成员。

4.1 静态变量

静态变量是隶属于类的变量,而不是属于任何一个类的具体对象。也就是说,对于该类的任何一个具体的对象而言,静态变量是一个公共的存储单元,不是保存在某个对象实例的内存空间中,而是保存在类的内存空间的公共存储单元中。
对于静态变量的使用,建议采用 类名.变量名 的形式来访问。

4.2 静态方法

static 修饰符修饰的方法是属于类的静态方法,又称为类方法。静态方法有如下几重含义:

4.3 静态初始化器

静态初始化器是由关键字 static 修饰的一堆大括号 {} 括起来的语句组,它与构造方法有几点根本的不同:

一般来讲,Java在新建一个对象的时候各个初始化方法的执行的顺序为:
父类的静态初始化器 \rightarrow 子类的静态初始化器 \rightarrow 父类的构造函数 \rightarrow 子类的构造函数

这里我们来看一个例子:

class Shape {
    Shape () {
        System.out.println("This is the construct function of shape class.");
    }
    static {
        System.out.println("This is shape's static construction area.");
    }
}

class Circle extends Shape{

    Circle () {
        System.out.println("This is the construct function of Circle class.");
    }
    static {
        System.out.println("This is Circle's static construction area.");
    }
}

public class test {
    public static void main(String[] args) {
        Circle a = new Circle();
        Circle b = new Circle();
    }
}

上述代码中,Circle 类继承了 Shape 类,两个类中都有各自的静态初始化器和构造函数,我们在 main 方法中新建了两个 Circle 对象,执行结果为:

This is shape's static construction area.
This is static Circle's construction area.
This is the construct function of shape class.
This is the construct function of Circle class.
This is the construct function of shape class.
This is the construct function of Circle class.

以上结果说明在新建对象的时候初始化器的执行顺序。而且我们可以发现,不论新建多少个对象,类的静态初始化器只会执行一次,而构造函数每次都会被执行。

5. final修饰符

5.1 用来修饰基本数据类型

如果一个基本类型的变量被声明为final,则代表它为一个常量,其值不能被修改。这也意味着在声明它的时候也必须要进行初始化工作。(在这种用法上,final类似于 C/C++ 中的const)。例如:

final int FILE_NEW = 1;

为final变量的所有的字符选择大写是一个普遍的编码约定。声明为final的变量在实例中不占用内存。这样,一个final变量实质上是一个常数。

5.2 用来修饰一个引用

用来修饰一个引用时,则该引用不能修改,但被该引用指向的对象本身可以修改。

5.3 用来修饰一个方法

final关键字也可以被应用于方法,代表该方法为最终方法,无法被子类重写,但是仍然可以被继承。

5.4 用来修饰一个类

当用final来修饰类时,该类成为最终类,无法被继承。

上一篇下一篇

猜你喜欢

热点阅读