要分类类一个和类两个。这两个类都在同一个包中。我想访问一个类数据到其他类如何访问变量数据。我的程序非常冗长,我只想要这个逻辑。提前感谢你。
Class A.java
public class A
{
public static void main(String ar[])
{
int a=100;
}
}
班级B.java
public class B extends A
{
public static void main(String m[])
{
A obj=new A();
System.out.println("Variable of class A is :"+ obj.a);
}
}
我做了这件事来获取访问,就像我声明变量a作为静态,以便我可以直接访问但它不工作。当我正在编译 B.java 它给我错误
找不到符号:= System.out.println(" A类的变量是:" + obj.a );
并且
非法开始表达(当我将变量a声明为公共时)
:-(错误)public int a = 100; [在A班]。
答案 0 :(得分:4)
为什么使用静态main方法?除此之外,字段a
是本地的,并且在范围之外无法访问。请改用它。
public class A
{
public int a;
public A()
{
a=100;
}
}
答案 1 :(得分:3)
上面没有两个真正的面向对象的类,而是静态主方法的两个以上的容器。要很好地组合来自两个类的代码,您将需要废弃该代码并生成符合OOP的类,并使用实例字段和方法。有关这方面的更多信息,请查看Java教程的OOP部分:link to OOP tutorial。
答案 2 :(得分:3)
首先,摆脱main()
中的A
。您只需要在应用程序中一个 main()
,并且它位于B
中(因为A
中的那个 任何东西):
public class A {
}
现在,您希望A
具有类级int
值:
public class A {
private int a;
}
您希望它的默认值为100
,是吗?构造函数是一个很好的地方:
public class A {
private int a;
public A() {
this.a = 100;
}
}
现在任何时候你这样做:
A obj = new A();
你将拥有一个具有值的对象。为了从该对象外部访问该值,您需要一个“getter”:
public class A {
private int a;
public A() {
this.a = 100;
}
public int get_a() {
return this.a;
}
}
现在在B
(或任何地方,真的),您可以创建A
的实例,并使用“getter”访问该值:
A obj=new A();
System.out.println("Variable of class A is :"+ obj.get_a());
从语义上讲,不要将其视为“从另一个类访问变量”。相反,请考虑您的对象是什么以及它们代表什么。如果它是一个物理的,现实世界的对象,内部包含某种价值。
当您创建该对象的实例时,该实例将在内部具有该值。从该对象的外部,它实际上并不重要如何在内部维护该值。只需要某种界面来查看价值。这是“getter”方法的作用。
答案 3 :(得分:1)
单行答案:要访问类外的变量,请将其设为类级别。您编写了一个方法级变量,该变量只能在该范围(方法)中访问。
详细说明:
将类Class 1和Class 2分开。这两个类都在同一个包中。我想将一个类数据访问到其他类中,如何访问变量数据。
所以基本上你知道通过扩展,你应该能够访问子类中的父类数据。为此,只需将父类中的数据作为类级别。
class A {
int var = 10; //class level, but non-static, so to access you need A object
void method() {
int var = 20; //this is method local and can not be accessed outside
}
}
public class B extends A {
public static void main(String[] args) {
A aObj = new A();
System.out.println(aObj.var);
}
}
非法开始表达(当我将变量a声明为公开时)
非法。因为public
,private
等访问修饰符适用于类级别的内容,例如您var
中的第一个main
或class B
方法。
说: 您需要立即转到此处:https://docs.oracle.com/javase/tutorial/ 而不是在缺乏语言基础时尝试运行某些课程。