java面向对象权限修饰符


在 Java 中,有四个权限修饰符可以用来控制类、方法、变量和构造函数的访问权限,这些修饰符分别是:

  1. public:公共的,被声明为 public 的类、方法、变量和构造函数可以被任何类访问。
  2. protected:受保护的,被声明为 protected 的类、方法、变量和构造函数只能被同一包内的类及其子类访问。
  3. default(即不写任何修饰符):默认的,被声明为 default 的类、方法、变量和构造函数只能被同一包内的类访问。
  4. private:私有的,被声明为 private 的类、方法、变量和构造函数只能被该类自身的方法访问,其他类无法访问。

这些权限修饰符的作用是为了控制对类、方法、变量和构造函数的访问,从而增加了代码的安全性和可维护性。在实际编程中,应该根据实际情况选择合适的修饰符来控制代码的访问权限,以便更好地维护和管理代码。

除了以上四个权限修饰符,Java 还有两个特殊的修饰符:

  1. final:表示不可变的,被声明为 final 的类不能被继承,被声明为 final 的方法不能被重写,被声明为 final 的变量不能被修改,被声明为 final 的参数在方法中不能被修改。
  2. abstract:表示抽象的,被声明为 abstract 的类不能被实例化,只能被继承,被声明为 abstract 的方法没有具体实现,需要子类去实现。

需要注意的是,权限修饰符和特殊修饰符可以一起使用,比如 public final class 表示该类是公共的并且不可继承的。

另外,在 Java 8 中,还引入了默认方法(default method)和静态方法(static method)这两种特殊的方法。默认方法可以在接口中有一个默认的实现,而静态方法则只能在接口中声明静态方法,不能有实现。

继承、多态、封装和抽象是面向对象编程的四大特性,权限修饰符在 Java 中起到了很重要的作用,帮助实现了这四大特性。

下面以一个简单的示例来说明 Java 中面向对象编程的特性。

假设我们有一个简单的图形类 Shape,它有一个抽象方法 calculateArea(),用于计算图形的面积。然后我们定义三个具体的子类:Rectangle、Circle 和 Triangle,它们都继承自 Shape 类,并且实现了 calculateArea() 方法。

// Shape 类
public abstract class Shape {
    public abstract double calculateArea();
}

// Rectangle 类
public class Rectangle extends Shape {
    private double width;
    private double height;

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public double calculateArea() {
        return width * height;
    }
}

// Circle 类
public class Circle extends Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double calculateArea() {
        return Math.PI * radius * radius;
    }
}

// Triangle 类
public class Triangle extends Shape {
    private double base;
    private double height;

    public Triangle(double base, double height) {
        this.base = base;
        this.height = height;
    }

    @Override
    public double calculateArea() {
        return 0.5 * base * height;
    }
}

在这个示例中,我们使用了继承来实现三个具体的图形类,并且它们都实现了 calculateArea() 方法,这样可以避免代码的重复。同时,我们还使用了抽象类 Shape 来定义 calculateArea() 方法,这样可以实现代码的重用和规范化。另外,我们在 Shape 类中定义了抽象方法,这样就需要子类来实现具体的行为。

接下来,我们可以通过多态的方式来使用这些图形类,如下所示:

public class Main {
    public static void main(String[] args) {
        Shape[] shapes = new Shape[3];
        shapes[0] = new Rectangle(3, 4);
        shapes[1] = new Circle(5);
        shapes[2] = new Triangle(3, 4);

        for (Shape shape : shapes) {
            System.out.println("Area of " + shape.getClass().getSimpleName() + " is " + shape.calculateArea());
        }
    }
}

在这个示例中,我们定义了一个 Shape 数组,然后将三个具体的图形类实例化并赋值给这个数组。接着,我们使用了多态的方式来遍历这个数组,并调用每个对象的 calculateArea() 方法来计算面积。这样可以避免使用大量的 if-else 语句,使程序更加简洁、易读和易维护。

总之,Java 中面向对象编程的特性可以使程序更加灵活、易读和易维护,合理地运用这些特性可以提高程序的质量和效率。


原文链接:codingdict.net