Java 修饰符:探索 Java 语言中的访问控制和继承机制
什么是修饰符?
Java 语言中,修饰符用于控制类、方法、变量和构造函数的访问和继承权限。Java 中有四种访问控制修饰符,它们分别是:
public protected default private
除此之外,Java 还有两种非访问控制修饰符,分别是:
static final
那么这些修饰符到底有什么作用呢?接下来我们将一一探究。
public 修饰符
public 修饰符是最常见的访问控制修饰符,它可以让类、方法、变量和构造函数对所有类可见,无论是在同一个包还是在不同的包中。
例如,我们可以在一个名为 MyPackage 的包中定义以下类:
package MyPackage; public class MyClass { public String name = "Java"; public void printName() { System.out.println("名称:" + name); } }
然后在另一个名为 TestPackage 的包中使用这个类:
package TestPackage; import MyPackage.MyClass; public class Test { public static void main(String[] args) { MyClass myObj = new MyClass(); myObj.name = "Java 修饰符"; myObj.printName(); } }
在这个例子中,MyClass 中的 name 和 printName() 方法都被声明为 public,所以它们可以在 Test 类中被访问。
protected 修饰符
protected 修饰符可以让类、方法和变量对同一个包中的其他类以及该类的子类可见。
例如,我们可以在一个名为 Animal 的类中定义以下方法:
public class Animal { protected void animalSound() { System.out.println("动物发出叫声"); } }
然后在一个名为 Cat 的子类中使用这个方法:
public class Cat extends Animal { public static void main(String[] args) { Cat myCat = new Cat(); myCat.animalSound(); } }
在这个例子中,我们可以在 Cat 类中访问 Animal 类中的 protected 方法 animalSound(),因为 Cat 是 Animal 的子类。
default 修饰符
default 修饰符也称为 package-private,它可以使类、方法和变量对同一个包中的其他类可见,但对于不在同一个包中的类是不可见的。
例如,我们可以在一个名为 MyPackage 的包中定义以下类:
package MyPackage; class MyClass { public String name = "Java"; void printName() { System.out.println("名称:" + name); } }
然后在同一个包中的另一个类中使用这个类:
package MyPackage; class Test { public static void main(String[] args) { MyClass myObj = new MyClass(); myObj.name = "Java 修饰符"; myObj.printName(); } }
在这个例子中,MyClass 中的 name 和 printName() 方法都没有被声明为 public 或 protected,所以它们只能在同一个包中的其他类中被访问。
private 修饰符
private 修饰符可以使类、方法和变量对该类的其他方法可见,但对于不在同一个类中的方法是不可见的。
例如,我们可以在一个名为 Person 的类中定义以下变量:
public class Person { private String name; public void setName(String newName) { name = newName; } public String getName() { return name; } }
在这个例子中,name 变量被声明为 private,这意味着只有 Person 类中的其他方法可以访问它。如果我们尝试在 Person 类外部访问 name 变量,编译器会报错。
static 和 final 修饰符
static 和 final 修饰符不属于访问控制修饰符,它们分别用于创建静态变量和常量。
static 修饰符用于创建类变量,也称为静态变量。这些变量属于类,而不是属于特定的实例。因此,它们可以被类中所有的对象或方法使用。
例如,我们可以在一个名为 MyClass 的类中定义以下静态变量:
public class MyClass { static String myClassVar = "Java"; public String myObjVar = "修饰符"; public static void main(String[] args) { MyClass myObj = new MyClass(); System.out.println(myObj.myObjVar); System.out.println(MyClass.myClassVar); } }
在这个例子中,myClassVar 变量被声明为 static,所以它可以被 MyClass 类中的任何方法使用。
final 修饰符用于创建常量,也称为不可变变量。一旦给常量赋值,它就不能被更改了。
例如,我们可以在一个名为 MyClass 的类中定义以下常量:
public class MyClass { final String myVar = "Java 修饰符"; public static void main(String[] args) { MyClass myObj = new MyClass(); System.out.println(myObj.myVar); } }
在这个例子中,myVar 变量被声明为 final,所以它的值不能被更改。
结论
修饰符在 Java 语言中起着非常重要的作用,它们可以帮助我们控制类、方法、变量和构造函数的访问和继承权限。了解这些修饰符的作用可以让我们更好地理解 Java 语言中的访问控制和继承机制。
希望这篇文章对你有所帮助,如果你有任何问题或建议,请在评论区留言。谢谢!
本文来源:词雅网
本文地址:https://www.ciyawang.com/0sm2wl.html
本文使用「 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 」许可协议授权,转载或使用请署名并注明出处。
相关推荐
-
如何使用new关键字创建实例?
new关键字? new关键字是JavaScript中的一个操作符,用于创建一个新的对象实例。它可以与构造函数一起使用,将构造函数返回的对象实例化。 let obj = new Constructor(
-
原型链:从JS初学者到高手的必修课程
象 在JavaScript中,对象是一种复合数据类型,它可以包含多个属性和方法。对象可以通过字面量、构造函数等方式创建。 // 字面量创建对象 const person = { name: '
-
什么是箭头函数?——深入探究JavaScript的新特性
这使得代码更加简洁易懂。 缺点 虽然箭头函数有很多优点,但是它也有一些缺点。首先,箭头函数不能作为构造函数使用,因为它没有自己的this值。其次,箭头函数不能使用arguments对象,因为它没有自
-
PHP中如何处理国际化和日期时间格式化?
可以使用DateTime类来处理日期时间。 创建DateTime对象 可以使用DateTime类的构造函数来创建DateTime对象。 // 创建DateTime对象 $datet
-
JavaScript constructor 属性:深入理解构造函数与实例对象的关系
引言 在JavaScript中,构造函数是非常常用的一种函数类型,它被用于创建对象并设置对象的属性。当我们使用new关键字来调用构造函数时,它将返回一个新的实例对象。然而,很多初学者并不理解构造函数与
-
C++ 类构造函数初始化列表:让你的代码更高效、更简洁
什么是类构造函数初始化列表? 在C++中,类的构造函数是用于初始化类的成员变量的。通常情况下,我们会使用在函数体内部使用赋值语句来为成员变量赋初值。但是,在某些情况下,这种方法可能会导致代码效率的降
-
Java Stack 类:深入探索堆栈数据结构
先定义了一个 int 类型的数组 stackArray 和一个整型变量 top。在 Stack 类的构造函数中,我们初始化了 stackArray 的大小,并将 top 的初始值设为 -1。在 pus
-
C++ 类 amp 对象:从初学者到专家的完全指南
代码运行。 什么是类和对象? 在 C++ 中,类是一种用户定义的数据类型。类中可以包含变量、函数、构造函数、析构函数等。而对象是类的一个实例。当您创建一个类的对象时,您实际上是创建了一个类的实例。
-
C++类成员函数:让你的代码更加人性化!
据的含义相关联,这使得代码更加自然和直观。 一些有用的类成员函数 以下是一些常用的类成员函数: 构造函数和析构函数 构造函数是一种特殊的类成员函数,用于创建对象并初始化其成员变量。析构函数是另一种