Java 静态内部类作用?

Python013

Java 静态内部类作用?,第1张

1、变值权限修饰作用,在定义内部类的时候,可以在其前面加上一个权限修饰符static。此时这个内部类就变为了静态内部类。

2、在某些特殊的情况下,少了这个静态内部类还真是不行。如在进行代码程序测试的时候,如果在每一个Java源文件中都设置一个主方法(主方法是某个应用程序的入口,必须具有),那么会出现很多额外的代码。

3、最主要的时这段主程序的代码对于Java文件来说,只是一个形式,其本身并不需要这种主方法。但是少了这个主方法又是万万不行的。在这种情况下,就可以将主方法写入到静态内部类中,从而不用为每个Java源文件都设置一个类似的主方法。

这对于代码测试是非常有用的。在一些中大型的应用程序开发中,则是一个常用的技术手段。

扩展资料

例如:

对于两个类,拥有相同的方法:

class People{

run()

}

interface Machine{

run()

}

此时有一个robot类:

class Robot extends People implement Machine.

此时run()不可直接实现。

interface Machine{

void run()

}

class Person{

void run(){

System.out.println("run")

}

}

class Robot extends Person{

private class MachineHeart implements Machine{

public void run(){

System.out.println("heart run")

}

}

public void run(){

System.out.println("Robot run")

}

Machine.getMachine(){returnnew MachineHeart()

}

class Test{

publicstaticvoid main(String[] args){

Robot robot=new Robot()

Machine m=robot.getMachine()

m.run()

robot.run()

}

}

参考资料来源:百度百科-静态内部类

使用内部类让Java实现 多继承

众所周知 Java没有像c++那样支持多继承 但是我们可以使用接口或内部类来模拟实现多继承

我们使用内部类来实现一个继承自消费者 又继承自生产者的派生类

实际上Java之所以设计出内部类这个概念 一方面是为了更好的封装性 另一方面就是借助内部类模拟实现多继承

首先我们定义一个消费者抽象基类

view plainprint?

/** * Consumer Class *@author androidyue *Last Modified     上午 */ public abstract  class Consumer { protected float buyPrice protected abstract void  buyGoods() }

以下是生产者抽象基类

view plainprint?

/** * Producer Class *@author androidyue *Last Modified     上午 */ public abstract class Producer { protected  float cost protected abstract void produce() }

使用内部类实现 多继承 的派生子类

view plainprint?

/** *Java实现 多继承

*@author androidyue *Last Modified     上午 */ public class InnerClassDemo extends Producer { private ConsumerBuyer buyer

public void desribeMySelf(){ System out println( 使用Java模拟多继承 ) this produce() this buyer=new ConsumerBuyer() this buyer buyGoods()

}

@Override protected void produce() { st= f System out println( 我是生产者 我以每件 +st+ RMB的成本生产一件产品 然后以 元价格对外出售 ) }

class ConsumerBuyer extends Consumer{

@Override protected void buyGoods() { this buyPrice= f System out println( 我是消费者 我以 +this buyPrice+ RMB 买了一件售价 元的商品 不信吧 因为我也是生产者!^_^ )

}

}

}

在程序入口调用

view plainprint?

/** *  the entrance of application *@author androidyue *Last Modified     上午 */ public class AppMain { public static void main(String[] args){ InnerClassDemo demo=new InnerClassDemo() demo desribeMySelf() }

lishixinzhi/Article/program/Java/hx/201311/25912

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("访问内部类构造方法")} }