当前位置:首页 » 编程语言 » java外部类访问内部类

java外部类访问内部类

发布时间: 2023-02-23 08:11:50

java:关于外部类访问内部类成员的问题

\\外部类对象可以直接访问内部类对象的成员变量和方法
你使用的这个方法的旨意是用非静态的外部类实例化一个内部类对象,外部类能够访问成员内部类的成员变量和方法的唯一途径就是通过实例化一个外部类的对象,然后这个对象通过 对象.makeInner()来new一个Inner in,此过程调用了Inner()这个内部类的构造函数。
其实你只是把顺序搞错了,编译时不回去运行你的函数方法,也就是代码中:
public void makeInner(){
Inner in = new Inner();
in.seeOuter();
}
这个越权的函数并未去执行访问其所在类的内部类的成员函数:Inner();
且Outer并不是static,所以其只能实例化一个对象,然后对象.makeInner();这时处于运行时,此类的对象可以调用此类的内部类的成员方法和成员变量,自然可以调用Inner();
说的简单点:你使用makeInner()时一定是实例化一个Outer的对象了,不然你无法调用makeInner,对吧,运行makeInner时他一定是在Outer这个类的对象下运行的,Outer的对象是可以访问其内部类Inner的变量和方法的。所以说:makeInner()运行时你绝对已经创建了一个Outer的对象了。是这个对象的makeInner()在运行,而这个Outer的这个对象是可以访问Outer的内部类Inner的变量和方法的。编译并非运行,编译时Outer没有实例化对象,但makeInner()也没被调用运行,所以他编译时没有去访问内部类Inner的东东,等你运行时自然你已经实例化一个对象了,自然也就可以访问了~~~

Ⅱ Java中,为什么外部类可以访问内部类的私有成员

本文通过反编译内部类的字节码,说明了内部类是如何访问外部类对象的成员的,除此之外,我们也对编译器的行为有了一些了解,编译器在编译时会自动加上一些逻辑,这正是我们感觉困惑的原因。关于内部类如何访问外部类的成员,分析之后其实

Ⅲ Java外部类怎么访问内部类的方法和成员呢可以在外部类创建内部类的实例化对象吗

是可以的,付代码说明:

packagecom.demo;

publicclassMain{

publicstaticvoidmain(String[]args){

//非静态内部类实例对象无法独立存在,必须依赖于一个外部类的实例对象
//所以必须先实例化一个外部类对象
Demodemo=newDemo();

//因为非静态内部类也是类的非静态成员,所以可以用对象.来访问
//下面用外部类对象.内部类构造器来创建内部类对象
Demo.InnerDemoinnerDemo=demo.newInnerDemo();

innerDemo.show();
}

}

/**
*一个外部类
*/
classDemo{

/**
*内部类,这里的内部类是非静态的。
*
*实例化静态内部类很简单,直接类名.内部类名,这里不多说。
*/
publicclassInnerDemo{

/**
*内部类的一个方法
*/
publicvoidshow(){
System.out.println("这是一个内部类的方法");
}

}

}

Ⅳ java外部类怎么调用内部类的方法

首先,你要搞清楚静态方法跟非静态方法的区别:

非静态方法是跟随着类的生命周期的,当类实例化时,非静态方法跟随着实例化对象产生,实例化对象可以调用类中的非静态方法,当实例化对象结束时,非静态方法也跟着结束。就是说,非静态方法是依附于实例化对象的,它的生命周期就是实例化对象的生命周期。

静态方法是不受制于类的实例化对象的,即静态方法从程序开始运行到最后释放内存结束是一直存在的,它的生命周期就是程序的生命周期。

从以上可知,静态方法调用非静态方法会造成一个问题,就是生命周期的不一致,比如说:程序刚刚开始运行时,类的实例化构造函数还没有执行,这时静态方法是调用不了非静态方法的;或者当实例化对象消亡之后,静态方法也是不能够去调用非静态方法的。

静态方法要想调用非静态方法,必须要通过实例化对象去调用;当然也可以把非静态方法变成静态方法,这样就不存在任何障碍了。

希望我的回答对你能够有所帮助。

Ⅳ Java在外界如何调用局部内部类

  1. 内部类和成员变量一样,通过外部类的实例调用内部类。

  2. 可以先创建外部类实例。

  3. 用外部类实例调用内部类构造方法创建内部类实例。

  4. 再用这个内部类实例调用内部类成员方法。

Aa=newA();
A.Bb=a.newB();
b.do1();//do是关键字,所以这里在do后面加了个1,否则无法编译。

Ⅵ java外部类怎样调用内部类方法

你这里面有两个错:
1、Leis内部类是非静态类,不能在静态方法里初始化,即第三行Leis x=new Leis();报错,可以把Leis类改成静态类,即
public static class Leis{
......
}

2、Leis()是Leis类的构造函数,不能在第4行x.Leis()显示调用

一句话:静态方法里不能访问非静态内部类。但你可以在外部类的一个成员方法里访问非静态内部类,然后你再在静态方法里初始化外部类,通过外部类来访问非静态内部类。

Ⅶ java 外部类可以访问内部类private问题

你既然是用private修饰符,就是希望声明的成员变量不被外部的类访问,而实现封装,那就要写相应的get和set方法来实现对成员变量的修改和访问!不然的话,你用public修饰,就应该不会报错了,如果还报错,就加上static关键字!应该就ok了!

Ⅷ java 内部类 能被外部使用吗

1、内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。
2、内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default)。
3、内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。 所以内部类的成员变量/方法名可以和外部类的相同。
4、内部类具有:成员内部类、局部内部类、嵌套内部类、匿名内部类。
以下以成员内部类示例:
成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。
要注意的是,成员内部类不能含有static的变量和方法。 因为成员内部类需要先创建了外部类,才能创建它自己的 ,了解这一点,就可以明白更多事情,在此省略更多的细节了。
在成员内部类要引用外部类对象时,使用outer.this来表示外部类对象;
而需要创建内部类对象,可以使用outer.inner obj = outerobj.new inner();
示例代码:
public class Outer {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer. new Inner();
inner.print( "Outer.new" );
inner = outer.getInner();
inner.print( "Outer.get" );
}
public Inner getInner() {
return new Inner();
}
public class Inner {
public void print(String str) {
System.out.println(str);
}
}
}

热点内容
海康sip服务器地址怎么填写 发布:2024-11-08 00:32:13 浏览:394
安通加密 发布:2024-11-08 00:25:51 浏览:138
为什么安卓和苹果单核差距那么大 发布:2024-11-08 00:25:50 浏览:438
存储器的种类 发布:2024-11-08 00:14:10 浏览:188
戴尔服务器bios怎么看日志 发布:2024-11-08 00:09:56 浏览:961
有渔编程下载 发布:2024-11-07 23:56:49 浏览:714
汉字在计算机内部存储 发布:2024-11-07 23:55:20 浏览:714
java启动jar 发布:2024-11-07 23:49:19 浏览:607
java方法的参数传递参数 发布:2024-11-07 23:37:12 浏览:445
安卓手机为什么一直停在开机画面 发布:2024-11-07 23:36:16 浏览:650