知识大全 浅析Java内部类在GUI设计中的作用(2)
Posted 知
篇首语:读书和学习是在别人思想和知识的帮助下,建立起自己的思想和知识。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 浅析Java内部类在GUI设计中的作用(2)相关的知识,希望对你有一定的参考价值。
浅析Java内部类在GUI设计中的作用(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
四 方法内部类
方法内部类只在该方法内部可见 方法内部类可以定义在方法中的任何位置
/**
* 内部类实现接口
*
* @author leizhimin : :
*/
public class Test
public static void main(String[] args)
Outer outer = new Outer();
Foo f = outer genFoo();
Bar b = outer genBar();
f say();
b readme();
class Outer
public Foo genFoo()
//方法内的内部类
class FooImpl implements Foo
public void say()
System out println( say foo! );
return new FooImpl();
public Bar genBar()
Bar b = null;
if (true)
//任意位置的内部类
class BarImpl implements Bar
public void readme()
System out println( say bar! );
b = new BarImpl();
return b;
运行结果
say foo!
say bar!
Process finished with exit code
五 匿名类
匿名类不给出类名 直接定义一个类 通常这个类实现了某种接口或者抽象 匿名类的访问权限更没有讨论价值了 看个例子就行了
在一些多线程程序中比较常见 有点变态 呵呵
/**
* 匿名类
*
* @author leizhimin : :
*/
public class Test
public Foo f = new Foo()
public void say()
System out println( O(∩_∩)O哈哈~! );
;
public Foo test()
return new Foo()
public void say()
System out println( say foo! );
;
public static void main(String[] args)
Test t = new Test ();
t f say();
t test() say();
interface Foo
void say();
运行结果
say foo!
Process finished with exit code
/**
* 普通类的匿名初始化
*
* @author leizhimin : :
*/
public class Fk
private String x;
public Fk(String x)
this x = x;
@Override
public String toString()
return Fk +
x= + x + \\ +
;
class Test
public Fk hehe()
//把后面的一对大括号去掉呢 呵呵
return new Fk( fk )
;
public static void main(String[] args)
Test t = new Test ();
Fk f = t hehe();
System out println(f);
运行结果
Fkx= fk
Process finished with exit code
还有一个不得不提的经典实例 来自thining in java 有改动
interface Service
void method ();
void method ();
interface ServiceFactory
Service getService();
class Implementation implements Service
private Implementation ()
public void method () System out println( Implementation method );
public void method () System out println( Implementation method );
public static ServiceFactory factory = new ServiceFactory()
public Service getService()
return new Implementation ();
;
class Implementation implements Service
private Implementation ()
public void method () System out println( Implementation method );
public void method () System out println( Implementation method );
public static ServiceFactory factory = new ServiceFactory()
public Service getService()
return new Implementation ();
;
public class Factories
public static void serviceConsumer(ServiceFactory fact)
Service s = fact getService();
thod ();
thod ();
public static void main(String[] args)
serviceConsumer(Implementation factory);
serviceConsumer(Implementation factory);
这个应用给了我们很多思考 我就不说了 不同人看了会有不同的感受
内部类的巧妙使用会让你的代码很牛 如果要形容下 那就是 没看懂的时候感觉神出鬼没 看懂后感觉鬼斧神工 不过这些代码多了 别人想看懂都难 想看懂你思路就难上加难了 呵呵!
六 静态内部类
静态内部类是static class型的内部类 这种内部类特点是 它不能访问外部类的非静态成员 要创建静态内部类对象时候 也不需要外部类对象了 直接可以
new 外部类名 内部类构造方法
来创建 给个例子
/**
* 静态内部类
*
* @author leizhimin : :
*/
public class Outer
public static int i = ;
protected static class Inner
int i = ;
String name;
Inner(String name)
this name = name;
void sayHello()
System out println( Hello + name);
Outer i++;
public Inner genInner(String name)
return new Inner(name);
class Test
public static void main(String[] args)
Outer Inner in = new Outer Inner( );
in sayHello();
System out println(Outer i);
Outer Inner in = new Outer() genInner( );
in sayHello();
System out println(Outer i);
运行结果
Hello
Hello
Process finished with exit code
七 接口内部类
接口内部类自动都是public static的 相当于为接口定义了一种变量类型 这在java的设计中就有使用 比如在HashMap中 就有
static class Entry implements Map Entry
下面我给个例子
/**
* 接口内部类
*
* @author leizhimin : :
*/
public interface AInterface
void readme();
class Inner implements AInterface
public void readme()
System out println( 我是一个接口内部类 );
class Main
public static void main(String[] args)
AInterface Inner in = new AInterface Inner ();
in readme();
八 内部的类的嵌套
所谓内部类嵌套 就是内部类里面再定义内部类 其实这种用法还真没见过 试试写个简单例子看看吧
/**
* 嵌套内部类
*
* @author leizhimin : :
*/
public class Outer
private void f ()
System out println( f );
class A
private void a()
f ();
System out println( a );
class B
protected void b()
a();
System out println( b );
class Test
public static void main(String[] args)
Outer o = new Outer();
Outer A a = o new A();
Outer A B b = a new B();
b b();
运行结果
f
a
b
Process finished with exit code
八 内部类的继承
内部类的继承 可以继承内部类 也可以继承外部类
/**
* 内部类的继承 可以继承内部类 也可以继承外部类
*
* @author leizhimin : :
*/
public class Outer
class Inner
void doSomething()
System out println( Inner doing );
class Inner extends Inner
void doSomething()
System out println( Inner doing );
void readme()
System out println( HeHe! );
class Test
public static void main(String[] args)
Outer outer = new Outer();
Outer Inner in = outer new Inner();
Outer Inner in = outer new Inner ();
in doSomething();
in doSomething();
in readme();
运行结果
Inner doing
Inner doing
HeHe!
Process finished with exit code
总结
内部类是Java中最复杂深奥的概念之一 而且内部类在访问控制 修饰符 继承 实现 抽象 序列化等等很多方面都是一个很让人迷惑的问题 在实际中 这些问题也许永远没机会没时间搞清 但是一般说来 懂得以上的内部类的知识就足够用了
内部类的设计也许是弥补Java语言本身的先天不足吧 作为语言来说 这个特性太变态了点 难道就没别的法了?
cha138/Article/program/Java/hx/201311/26666相关参考
如何设计出有GUI特色的“纯”JAVA程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 现在J
Vector类在Java编程中的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Vector
知识大全 Java 中LockSupport类在C#中的实现
Java中LockSupport类在C#中的实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
浅析Java多线程程序设计机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 多线程是Java语
要想使用new生成一个内部类的实例需要先指向一个外部类的实例也就是先生成外部类的实例因为内部类可以调用外部类的人员成员当没有外部类实例的时候也就没有这些成员的内存空间内部类在实例化的时候调用外部类
本文代码展示了在一个方法中通过匿名内部类定义一个Thread并Override它的run()方法之后直接启动该线程 下面的代码展示了在一个方法中通过匿名内部类定义一个Thread并Overrid
Java中的堆栈内存浅析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java把内存划分成两种
设计模式解决某一类问题最行之有效的方法(java中有种通用设计模式) 单例设计模式解决一个类在内存中只存在一个对象 单例设计模式有两种方式 )饿汉式 先初始化对象当类一进内存就创建好对象
浅析Java多线程编程中的高级技术 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
java学习---GUI开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! java学习之——G