抽象类的内部类怎么实例化!!!

抽象类的内部类怎么实例化!!!,第1张

public class A {

class B{

int b = 66666;

public int getNum(){

return b;

}

}

public B getB(){

return new B();

}

public static void main(String args[]){

A a = new A();

B b = agetB();

}

}

或者这样:

public class A {

public class B{

int b = 66666;

public int getNum(){

return b;

}

}

public static void main(String args[]){

A a = new A();

B b = anew B();

}

}

外部调用抽象类必须实现后实例化,才能调内部类。原因是内部类可以调外部类的参数,你外部类是抽象的,怎么可能让你通过内部类来调用一个抽象外部类未实现的方法

要么把关键字去掉static去掉;

要么在内部类前面加个static关键字

private static class Saler{

Saler(){

}

}

内部类又分为:常规内部类、局部内部类、匿名内部类和静态嵌套类四种。

1、静态内部类定义

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

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

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

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

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

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

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

在其他类中创建内部类的对象时,必须要使用外部类的实例来创建。比如类B是类A的内部类,则语句AB=new AB()将是错误的。正确的方法是先创建一个类A的对象,比如A ma=new ma();然后再用这个对象来创建内部类的实例,比如AB mab=manew B();这里要注意后面的语法manew B()。也可以把这两步合为一步,比如AB mab=new A()new B();注意,这里使用了两个new运算符,如果只有一个将是错误的,比如AB mab=new A()B();是错误的,new A()B()语句JAVA会理解为创建一个无名的引用,然后由这个引用调用类A中的B()函数。如果需要调用的构造函数不是默认的,则可以这样创建比如AB mab=new A(2)new B();或者分为两步A ma=new A(2); AB mab=manew B();

而且我也怕是不是会重新建个棋盘,那就不行了!

这个你可以放心,不会创建两个棋盘,下面举例验证

public class A2 extends JFrame {

public static void main(String[] args) {

A ma=new A(); //可以看到在这里并没有创建内部类,也就是说内部类中的bbb并没有输出

AA1 ma1=manew A1(); //调用内部类的方法,当然内部类如果有带参数构造函数,则还应在内部类中加上参数。

ma1f();

}}

class A{

A(){Systemoutprintln("aaa");}

class A1{

A1(){Systemoutprintln("bbb");}

public void f(){Systemoutprintln("kkk");}}

}

把类放在方法内

class Outer {

public void doSomething(){

class Inner{

public void seeOuter(){

}

}

}

}

(1)、方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。

(2)、方法内部类对象不能使用该内部类所在方法的非final局部变量。

因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。

下面是完整的例子:

class Outer {

public void doSomething(){

final int a =10;

class Inner{

public void seeOuter(){

Systemoutprintln(a);

}

}

Inner in = new Inner();

inseeOuter();

}

public static void main(String[] args) {

Outer out = new Outer();

outdoSomething();

}

}

以上就是关于抽象类的内部类怎么实例化!!!全部的内容,包括:抽象类的内部类怎么实例化!!!、java内部类实例的问题、四种内部类详解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9311155.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存