「java中没有访问符」java无法访问的语句

博主:adminadmin 2023-01-12 04:15:06 631

本篇文章给大家谈谈java中没有访问符,以及java无法访问的语句对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

在Java和c#中如果不写访问修饰符,类和类成员默认的是什么访问修饰符?

省略类的访问修饰符,默认为internal

省略类成员的访问修饰符,默认为private

java 的访问修饰符是什么?

Java中的访问修饰符

Java面向对象的基本思想之一是封装细节并且公开接口。Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节。访问控制分为四种级别:

(1)public: 用public修饰的类、类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问;

(2)protected: 用protected修饰的类、类属变量及方法,包内的任何类及包外那些继承了该类的子类才能访问(此处稍后解释),protected重点突出继承;

(3)default: 如果一个类、类属变量及方法没有用任何修饰符(即没有用public、protected及private中任何一种修饰),则其访问权限为default(默认访问权限)。默

认访问权限的类、类属变量及方法,包内的任何类(包括继承了此类的子类)都可以访问它,而对于包外的任何类都不能访问它(包括包外继承了此类的子类)。default重点突出包;

(4)private: 用private修饰的类、类属变量及方法,只有本类可以访问,而包内包外的任何类均不能访问它。 

网上一些资料及一些书上用表格对java访问修饰符做了清楚的总结,如下表所示:

重要总结:通过上面的分析,我们可以看到:

1. public、private和protected对我们来说没有任何异议。

2. 顶层类只能用public访问修饰符和default(默认)访问修饰符修饰,其中用默认修饰符修饰的类(及没有任何修饰符的类,如class B{})不能被其他包中的类继承,这也说明了default(默认)访问修饰符突出的是包权限

3. protected:本人做了一次实验,发现在不同包的子类中,new一个父类对象,并用该父类对象去访问父类中的用protected修饰的类属变量和方法时不能访问,而new一个子类对象时,子类对象可以访问(说明protected修饰的类可以被其他包中的类继承)。也可以在子类重写父类的方法中使用super关键字调用。这岂不是和上面表格中的总结(红色对勾)冲突了?本人也是百思不得其解。最后在网上找到了一个相对比较认可的解释,如下:

protected修饰符的修饰的成员变量和方法也称为受保护的成员变量和方法, 受保护的成员变量和方法可以在本类或同一个包中的其它类(包括子类)中通过类的实例进行访问,也可以被同一个包中的类或不同包中的类继承,但是不能在不同包中的其它类(包括子类)中通过类的实例进行访问。

4. 如果一个类使用public修饰,那该类的类名必须与他所在的源文件名相同。一个.java源文件中有且只有一个public类,顶层类只能用public和默认修饰符(即无修饰符)修饰;

5. final修饰的类不能被继承,没有子类。

6. abstract修饰的类不能被实例化,必须被子类继承。类只要有一个抽象方法就必定是抽象类,但抽象类不一定要有抽象方法。

最终总结,就一句话:protected修饰符所修饰的类(这句话中指父类)属成员变量和方法,只可以被子类访问,而不管子类是不是和父类位于同一个包中。default修饰符所修饰的类属成员变量和方法,只可被同一个包中的其他类访问,而不管其他类是不是该类的子类。protected属于子类限制修饰符,而default属于包限制修饰符。

关于Java中类的访问修饰符

一:访问修饰符:

1.省略访问修饰符

具有默认的访问特性,即具有包访问特性,只能被同一个包中的类使用。

2.public访问修饰符

用于说明类和类的成员的访问权限。这种类叫公有类。在一个文件中只能有一个public类型的类。

例如:Rect和UseImport两个类,分别在两个不同的包中。顺便回顾一下不同类要用import导入。(哎,一直就没记住)

//Rect.java

pacakage my;

public class Rect

{

private int a,b;

public void init(int len,int width)

{

a=len;

b=width;

}

public int area()

{

return a*b;

}

}

//UseImport.java

import.my.*;//导入my 包的所有类

public class UseImport

{

public static void main(string[] args)

{

Rect x=new Rect();

x.init(2,3);

System.out.println("矩形面积为:"+x.area());

}

}

3.private

用private修饰的类成员成为私有成员,只能在声明该成员的类中使用,不能在类外使用。一般通过本类中公有方法进行访问。

4.protected

protected修饰的类成员为保护成员,可以被三种类使用,分别是该类本身,该类的所有子类,该类同包的其他类,该类的子类。

5.private protected

私有保护成员。可被两种类使用。分别是:该类本身和该类的所有子类。

二:特征修饰符

1.abstract:抽象

修饰类为抽象类,修饰方法为抽象方法。只要类中有抽象方法,就必须定义为抽象类。抽象方法只能声明,不能实现。但是可以在其子类中对抽象方法进行实现。抽象类中也可以包含非抽象方法。

2.final:最终

修饰的类为终止类,不能有子类。修饰变量为终止变量,只可赋值一次。修饰方法为终止方法,不能在子类中更改。如Socket、ServerSocket等都是final类,防止黑客派生子类进行破坏。同时,final与abstract是相互矛盾的。

3.static:静态

静态成员无需通过对象调用,可以直接通过类名直接调用。

public class RectArea//输出6 和 12

{

public static void main(String[] args)

{

System.out.println(area(2,3));

System.out.println(area(3,4));

}

static void area(int a,int b)

java中没有访问符的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java无法访问的语句、java中没有访问符的信息别忘了在本站进行查找喔。