当前位置:首页 » 密码管理 » 内部类怎么访问

内部类怎么访问

发布时间: 2022-12-16 09:46:19

‘壹’ java 静态内部类的使用

Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。内部类又分为:常规内部类、局部内部类、匿名内部类和静态嵌套类四种。

1、静态内部类定义

静态内部类,定义在类中,任何方法外,用static定义;静态内部类只能访问外部类的静态成员。

生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。可以定义私有静态内部类。

2、java实现静态内部类注意事项

将某个内部类定义为静态类,跟将其他类定义为静态类的方法基本相同,引用规则也基本一致。不过其细节方面仍然有很大的不同。具体来说,主要有如下几个地方要引起注意。

1)一般情况下,如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候,是不能够被定义成静态成员变量与静态成员方法的。也就是说,在非静态内部类中不可以声明静态成员

2)一般非静态外部类可以随意访问其外部类的成员变量以及方法(包括声明为private的方法),但是如果一个内部类被声明为static,则其在访问包括自身的外部类会有诸多的限制。静态内部类不能访问其外部类的非静态成员变量和方法

3)在一个类中创建非静态成员内部类的时候,有一个强制性的规定,即内部类的实例一定要绑定在外部类的实例中。然后要在一个外部类中定义一个静态的内部类,不需要利用关键字new来创建内部类的实例。即在创建静态类内部对象时,不需要其外部类的对象

3、静态内部类示例

java在实现LinkedList时使用了如下内部类:

public class LinkedList<E>

extends AbstractSequentialList<E>

implements List<E>, Deque<E>, Cloneable, java.io.Serializable

{

........

private static class Entry<E> {

E element;

Entry<E> next;

Entry<E> previous;

Entry(E element, Entry<E> next, Entry<E> previous) {

this.element = element;

this.next = next;

this.previous = previous;

}

}

private Entry<E> addBefore(E e, Entry<E> entry) {

Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);

newEntry.previous.next = newEntry;

newEntry.next.previous = newEntry;

size++;

modCount++;

return newEntry;

}

........

}

这里即静态内部类的典型用法

‘贰’ java 主方法怎么调用内部类的方法

System.out.println(x);//这个是55

System.out.println(In.x);//这个是9

楼主这两行是对的,楼上是不用兄弟认为人家这儿错了?


1,后面那个是无法做到的那个x是方法的局部变量,在进入方法时被推到栈里,方法结束后就出栈了。除非有方式可以跑一个在主方法中的线程监控当前栈中变量,就像是Debug一样,我也研究好久这个,不过没发现有。

2, 也像1一样没有侵入性,你可以用字节码框架去操作类,动态地改变方法的行为,也就是说你可以在main方法中用程序语言去改变doit(x)方法里所做的事情。

3, 再侵入点儿,你可以传进那个doit(int)方法一个Callback,你明白我意思?给你看个回调式:

publicclassHelloJava{
privateinterfaceListener{
publicvoidlistenDoit(intx);
}
privatestaticintx=55;
privateclassIn{
privateListenerlistener;
privatestaticfinalintx=9;
publicIn(Listenerlistener){this.listener=listener;}
publicvoiddoit(intx){
listener.listenDoit(x);
x=6;//这个X和上一行的应该是同一个吧?怎么在主方法里输出这个量?
listener.listenDoit(x);
HelloJava.this.x++;
}
}
publicstaticvoidmain(String[]args){
System.out.println(x);//这个是55
System.out.println(In.x);//这个是9
Inin=newHelloJava().newIn(newListener(){
@Override
publicvoidlistenDoit(intx){
System.out.println(x);
}});
in.doit(0);
System.out.println(x);//这个是55
System.out.println(In.x);//这个是10
}
}

还有许多方式可以做到,比如代理模式等等,不过都大同小异。该方法好处是不改变方法的原定义模型。如返回值从void改成int,如果doit的返回值本身就是String,要返回个其他的东西,怎么去改变返回值完成?

另外运行一下会发现最后两行输出不是55 10, 而是56, 9,你就知道HelloJava.this.x++;做的是什么了。

4,然后就是楼上朋友们都说的方式,返回值。

‘叁’ java 两个内部类之间怎么互相访问

你写两个内部类的话,后面的可以调用前面的,前面的不能调用后面的
main()方法是顺序执行的

‘肆’ c++内部类怎么访问外部类

内部类本身就可以直接访问外部类啊,如果你说的不是一个继承体系下的基类或者当前类部分的话,请使用传参数方式了。

‘伍’ java中我把外部类方法私有了 内部类如何访问该方法 代码如下

private int x=3;
int a;
static class Inner
{
int x = 4;

public void function() {
int x = 6;
System.out.println(x);
System.out.println(this.x);
// System.out.println(Outer.this.x);//内部类可以直接访问外部类中的成员,包括私有。(访问私有)
// method();//内部类可以直接访问外部类中的成员,包括私有。(该访问成员)

}
}
public static void main(String[] args){
new Inner().function();
}
只能这样做,把内部类改成 静态的 直接new一个类 调方法

‘陆’ java内部类怎么使用

1.内部类的方法可以访问它所在的外部类中的所有域,包括私有型别的;
2.对于同一个包中的其它类它是隐藏的;
3. 匿名的内部类可以让我们很方便的定义事件响应(call back),这在GUI编程中很常见
interface OutInterface{ //定义一个接口 public void f(); } public class InterfaceInner { //主类 public static void main(String args[]){ OuterClass2 out=new OuterClass2(); OutInterface outinter=out.doit(); outinter.f(); } } class OuterClass2{ //定义一个内部类,并且接口OutInterface private class InnerClass implements OutInterface{ InnerClass(String s){ System.out.println(s); } public void f(){ System.out.println("访问内部类中的f()方法"); } } public OutInterface doit(){ //方法返回接口 return new InnerClass("访问内部类构造方法"); } }

‘柒’ c++内部类访问外部类的方法

内部类就是外部类的友元类,内部类可以通过外部类的对象来访问外部类的所有成员。

‘捌’ 内部类里面的方法怎么访问外部类成员,求解!!!

在内部类使用this表示的是对内部类自身的引用,如果想要获取外部类的引用,应当使用Outer.this,所以访问外部类的方法:
Outer.this.xxxx()

热点内容
苹果的照片转移到安卓为什么少了 发布:2025-07-26 09:26:34 浏览:766
微信账号和微信密码在哪里找 发布:2025-07-26 09:26:34 浏览:284
拆弹密码是什么意思 发布:2025-07-26 09:12:43 浏览:604
编译原理c 发布:2025-07-26 09:08:05 浏览:81
最小袅解压密码 发布:2025-07-26 09:07:58 浏览:496
空的文件夹无法删除 发布:2025-07-26 09:02:56 浏览:385
西门子plc编程软件win7 发布:2025-07-26 09:02:12 浏览:497
压缩密度 发布:2025-07-26 09:00:43 浏览:802
全加密ic卡 发布:2025-07-26 09:00:35 浏览:530
oracle自动备份数据库 发布:2025-07-26 08:59:47 浏览:25