Java中的访问修饰符方法重写

1. 访问修饰符概述

在Java中,访问修饰符(access modifier)被用来限制类、方法和变量的可见性。Java定义了四个访问修饰符:

public

protected

default(也称为package-private)

private

这四个访问修饰符的可见性依次降低,其中public为最高级别,private为最低级别。下面我们将对这四个访问修饰符进行详细介绍。

2. public访问修饰符

public访问修饰符是Java中最常用的修饰符之一。使用public修饰的类、方法和变量可以被任何其他类访问。下面是一个使用public修饰符的例子:

public class MyClass {

public int myPublicVar;

public void myPublicMethod() {

//method implementation goes here

}

}

2.1 继承中的public访问修饰符

在继承关系中,使用public修饰的成员可以被子类继承并使用。下面是一个示例:

public class MyParentClass {

public void myPublicMethod() {

//method implementation goes here

}

}

public class MyChildClass extends MyParentClass {

//myPublicMethod is inherited and can be used here

}

3. protected访问修饰符

使用protected修饰的成员只在同一包内或子类中可见。下面是一个使用protected修饰符的例子:

public class MyClass {

protected int myProtectedVar;

protected void myProtectedMethod() {

//method implementation goes here

}

}

在同一个包中,我们可以正常访问和使用该类中的protected成员。而在其他包中,只有继承了该类的子类才能访问和使用该类中的protected成员。下面是一个示例:

package myPackage;

public class MyParentClass {

protected void myProtectedMethod() {

//method implementation goes here

}

}

package anotherPackage;

import myPackage.MyParentClass;

public class MyChildClass extends MyParentClass {

public void myMethod() {

//can use myProtectedMethod() because we inherited it from MyParentClass

myProtectedMethod();

}

}

4. default访问修饰符

使用default修饰符的成员只在同一包中可见。如果没有指定任何访问修饰符,则成员默认被设置为default。下面是一个使用default修饰符的例子:

class MyClass {

int myDefaultVar;

void myDefaultMethod() {

//method implementation goes here

}

}

在同一个包中,我们可以正常访问和使用该类中的default成员。而在其他包中,无法访问和使用该类中的default成员。下面是一个示例:

package myPackage;

class MyClass {

void myDefaultMethod() {

//method implementation goes here

}

}

package anotherPackage;

import myPackage.MyClass;

public class MyOtherClass {

public void myMethod() {

//can't use myDefaultMethod() because it has default access

MyClass obj = new MyClass();

//obj.myDefaultMethod(); <-- compilation error

}

}

5. private访问修饰符

使用private修饰的成员只在该类中可见,其他类无法访问和使用。下面是一个使用private修饰符的例子:

public class MyClass {

private int myPrivateVar;

private void myPrivateMethod() {

//method implementation goes here

}

}

在其他类中,我们无法访问和使用该类中的private成员。下面是一个示例:

public class MyOtherClass {

public void myMethod() {

MyClass obj = new MyClass();

//can't use myPrivateVar or myPrivateMethod because they are private

//obj.myPrivateVar; <-- compilation error

//obj.myPrivateMethod(); <-- compilation error

}

}

6. 方法重写

在Java中,当子类继承了父类的方法并且需要修改该方法的实现细节时,就可以使用方法重写(method override)的技术。

6.1 方法重写的概念

方法重写指的是在子类中声明一个与父类中同名、参数列表也相同、但实现细节不同的方法。使用方法重写可以修改继承来的方法,从而更好地适应子类的需求。

6.2 方法重写的注意事项

在进行方法重写时,需要遵守以下注意事项:

重写方法必须与父类方法有相同的名称和参数列表。

重写方法的访问修饰符不能比父类方法的访问修饰符更严格。

重写方法不能抛出比父类方法更宽泛的异常。

重写方法不能使用比父类方法更严格的访问控制修饰符。

重写方法可以使用比父类方法更宽泛的返回类型。

6.3 方法重写的示例

下面是一个使用方法重写的示例:

public class MyParentClass {

protected void myProtectedMethod() {

System.out.println("Parent class method!");

}

}

public class MyChildClass extends MyParentClass {

protected void myProtectedMethod() {

System.out.println("Child class method!");

}

}

//调用方法

MyParentClass parent = new MyParentClass();

MyChildClass child = new MyChildClass();

parent.myProtectedMethod(); //调用的是父类方法,输出"Parent class method!"

child.myProtectedMethod(); //调用的是子类方法,输出"Child class method!"

在上面的示例中,子类MyChildClass继承了父类MyParentClass的方法myProtectedMethod(),并且重写了该方法的实现细节。在调用myProtectedMethod()时,如果调用的是父类实例的方法,则会输出"Parent class method!",如果调用的是子类实例的方法,则会输出"Child class method!"。

7. 总结

Java中的访问修饰符和方法重写是面向对象编程的两个重要概念。使用访问修饰符可以控制类、方法和变量对外的可见性,从而增强代码的封装性和安全性。使用方法重写可以修改继承来的方法实现,从而更好地适应子类的需求。在进行访问修饰符和方法重写时,需要遵守一定的规则和注意事项,以确保代码的正确性和可维护性。

后端开发标签