在这里,我想将受保护的变量rollno
访问到另一个包package2
。
所以,我已经把这两个程序:
所以,当我运行Check.java
时,它会引发错误not defined
@
Protected1
这里唯一的目标是从包测试中访问受保护的变量package2
package test;
import java.io.*;
import java.util.*;
import java.lang.*;
public class Protected1
{
static protected int rollno;
static public String name;
static private int mobileno;
public void Protected1()
{
System.out.println("lets start doing the Assignment for Protected variable assigning in another package");
}
public static void main(String a[])
{
/*protected int rollno;
public String name;
private int mobileno;*/
Scanner br=new Scanner(System.in);
//Protected1 st=new Protected1();
try
{
System.out.println("Enter the name:");
name=br.nextLine();
System.out.println("Enter the rollno:");
rollno=br.nextInt();
System.out.println("Enter the mobile number:");
mobileno=br.nextInt();
System.out.println("lets just print it out:");
System.out.println("name is \t"+name);
System.out.println("rollno is \t"+rollno);
System.out.println("mobileno is \t"+mobileno);
}
catch(Exception e)
{
System.out.println("Exception caught");
e.getMessage();
}
}
}
package package2
import java.io.*;
import java.util.*;
import test.* ;
public class Check extends Protected1
{
public int Check()
{
System.out.println("hello guys ..lets try");
return 0;
}
public static void main(String a[])
{
Scanner dr=new Scanner(System.in);
Protected1 as=new Protected1();
int roll=as.rollno;
System.out.println("type welcome");
String input=dr.nextLine();
System.out.println("now we have to assess the protected variable from Protected 1 i.e"+roll);
}
}
答案 0 :(得分:1)
受保护的变量和方法允许类本身访问它们,同一个包内的类来访问它们,以及该类的子类来访问它们。
了解详情:Here
静态变量是与该类关联的变量,该类的 不是对象 。 静态变量只初始化一次。
支持OOP语言"静态" 关键字及其属性,但许多OOP程序员认为静态变量或静态方法不应该用于程序中。其中一个原因是,静态变量存储在Stack中。如果在程序中使用了如此多的静态变量,则堆栈正在填充。
答案 1 :(得分:0)
简短的回答:您无法从其他包中访问受保护的变量。这就是java(和其他面向对象语言)具有访问修饰符的原因。
然而,(几乎)每条规则都有例外。如果您真的需要这个,您可以在该包中创建访问“受保护”变量(或方法)的特殊访问者类,或者扩展包含受保护成员的类并通过公共方法公开它。
其他方式是使用反射。您始终可以在每个方法或字段上调用setAccessible(true)
,然后使用它:
Field protectedField = clazz.getDeclaredField("theProtectedField");
protectedField.setAccessible(true);
protectedField.get(obj); // Now you can access the variable.
关于方法和构造函数也是如此。