专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » java内部类:Java内部类应用实践 »正文

java内部类:Java内部类应用实践

来源: 发布时间:星期四, 2009年2月12日 浏览:346次 评论:0


种应用简而言的可以类比c语言里面struct方便而且还可以对外部隐藏(通过private)

介绍说明:我习惯使用Container来命名inner 外部以区别该Java文件以外感觉这样更贴切

package com.sss.exam.inner;
/**
* <p>标题: OutterApp1.java</p>
* <p>功能描述:内部类应用场景1:
* 相当于delphi记录类型或者c结构体
*
* <p>版权: Copyright (c) 2007</p>
* <p>公司: </p>
* @author fbysss
* @version 1.0

*/

public Container1 {
private PrivateParams{//私有是针对外部其他类访问是私有即外部其他类不能访问
public id ;
public String name;
}

public PublicParams{
public id ;
public String name;
}
/*本思路方法可以访问私有内部类
* */
public void testParams{
PrivateParams params = PrivateParams;
params.id = 1;
params.name = "sss";
}
/**
* @param args
*/
public void (String args) {
Container1 out = Container1;
//Container1可以访问public内部类和private内部类
PublicParams pp = out. PublicParams;
pp.id = 2;
pp.name = "sss2";

PrivateParams params = out. PrivateParams;
params.id = 3;
pp.name = "sss3";

}

}
其他类访问:

public JustTest {
public void (String args) {
Container1 out = Container1;
//Container1可以访问public内部类和private内部类
PublicParams pp = out. PublicParams;
//compile error .不能访问私有内部类PrivateParams params = out. PrivateParams;
}
}
第 2种和第 3种应用我认为差别不大可以理解为种情况不过是解决区别问题罢了

package com.sss.exam.inner;
/**
* <p>标题: Container2.java</p>
* <p>功能描述: <br>
*
* </p>
* <p>版权: Copyright (c) 2007</p>
* <p>公司: </p>
* @author fbysss
* @version 1.0
*/
/***
* 同个类里面定义非public不能加final abstract 的外modier
* 其modier 值为0不在Modier定义里面有人称的为friendly修饰符
*这里User跟单独写个User类区别仅仅在于modier.编译出来都是单独存在
*/
User{
id;
String name;
}

public Container2 {
private User user = null;
//个对象是可以这样解决了try catch问题
//但是如果是个String,则不行问题就在Java传值和传引用问题String相当于就是传值
/**
* @param args
*/
public void (String args) {
/*背景:catch和finally都相同只是try部分区别
* 传统思路方法:每次都需要写try,catch,finally
*
*/
/*
String user = null;
try{
user = "fbysss";
}catch(Exception e){
user = "error.";
}finally{
user "'s work finished.";
}*/

Container2A c2a = Container2A;
c2a.Method;


}
//使用了内部类思路方法:
public void Method{
Container2Common c2c = Container2Common;
c2c.execute( BaseMyMethod{
public User doMyMethod{//必须要有返回值否则通用处理思路方法得不到user
//error.无法访问user变量必须声明为成员变量user = "fbysss";
user = User;
user.name = "fbysss";
.out.prln(user.name);
user;

}
});
.out.prln("old user is:"+user.name);
}

}
公共处理类:

public Container2Common {
public void execute(MyMethod mm){
User user = null;
try{
//通用接口思路方法但是具体代码不
user = mm.doMyMethod;
}catch(Exception e){
user.name = "error.";
}finally{
user.name "'s work finished.";
.out.prln(user.name);
}
}
}
个性思路方法接口:

public erface MyMethod {
public User doMyMethod;
}

个性stub类是能够例子化接口是不能例子化

public BaseMyMethod implements MyMethod {

public User doMyMethod {
// TODO Auto-generated method stub
null;
}
}
0

相关文章

读者评论

  • 1fbysss(221.222.233.*) 发布于:星期五, 2008年10月31日
    本文BaseMyMethod 实际上不需要,请见修正版

发表评论

  • 昵称:
  • 内容: