您的位置:首页 > 编程语言 > Java开发

67 Java 内部类

2014-05-13 14:50 393 查看
package new20140512;

class Out {

// 定义一个内部类,不使用访问控制符
// 即只有同一个包中得其他类可访问该类的内部类
class InClass {
public InClass(String msg) {
System.out.println(msg);
}
}
}

public class Test3 {
public static void main(String[] args) {
// Out.InClass in=new Out().new InClass("测试信息");

Out.InClass in;
Out out=new Out();
in =out.new InClass("测试信息");//输出:测试信息

}
}


package new20140512;

class Out {

// 定义一个内部类,不使用访问控制符
// 即只有同一个包中得其他类可访问该类的内部类
class InClass {
public InClass(String msg) {
System.out.println(msg);
}
}
}

public class Test3 {
public static void main(String[] args) {
// Out.InClass in=new Out().new InClass("测试信息");

Out.InClass in;
Out out=new Out();
in =out.new InClass("测试信息");//输出:测试信息

}
}


package new20140512;

class Out {

// 定义一个内部类,不使用访问控制符
// 即只有同一个包中得其他类可访问该类的内部类
class InClass {
public InClass(String msg) {
System.out.println(msg);
}
}
}

public class Test3 {
public static void main(String[] args) {
// Out.InClass in=new Out().new InClass("测试信息");

Out.InClass in;
Out out=new Out();
in =out.new InClass("测试信息");//输出:测试信息

}
}

局部内部类

package new20140513;

/**
* 局部内部类
* ——如果一个类放在方法里定义,则这个内部类就是一个局部内部类,局部内部类仅在该方法里有效。
* —— 如果需要局部内部类定义变量、创建实例或派生子类,那么都只能在局部内部类所在的方法内进行
* @author x
*
*/
public class Test1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义局部内部类
class InnerBase
{
int a;
}
//定义局部内部类的子类
class InnerSub extends InnerBase
{
int b;
}
//创建局部内部类的对象
InnerSub is=new InnerSub();
is.a=5;
is.b=8;
System.out.println("InnerSub 对象的a和b Field是:"+is.a+","+is.b);
}

}


匿名内部类

package new20140513;
/**
* 匿名内部类
* ——适合创建那种只需要一次使用的类
* ——语法特点:创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失,
*   匿名内部类不能重复使用
*
*   @see 定义格式:
*   new 父类构造器(实参列表)|实现接口()
*   {
*      //匿名内部类的类体部分
*   }
*   ——匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口
*   ——匿名内部类不能时抽象类
*   ——匿名内部类不能定义构造器
* @author x
*
*/
interface Product
{
public double getPrice();
public String getName();
}
public class Test2 {

public void test(Product p)
{
System.out.println("购买:"+p.getName()+",单价:"+p.getPrice());
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2 test2=new Test2();
//调用test方法时,需要传入一个Product参数
//参数传入其匿名实现类的实例
test2.test(new Product() {

@Override
public double getPrice() {
// TODO Auto-generated method stub
return 4999;
}

@Override
public String getName() {
// TODO Auto-generated method stub
return "联想PC";
}
});
}
}

package new20140513;
/**
* 匿名内部类
* ——适合创建那种只需要一次使用的类
* ——语法特点:创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失,
*   匿名内部类不能重复使用
*
*   @see 定义格式:
*   new 父类构造器(实参列表)|实现接口()
*   {
*      //匿名内部类的类体部分
*   }
*   ——匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口
*   ——匿名内部类不能时抽象类
*   ——匿名内部类不能定义构造器
* @author x
*
*/
interface Product
{
public double getPrice();
public String getName();
}
public class Test2 {

public void test(Product p)
{
System.out.println("购买:"+p.getName()+",单价:"+p.getPrice());
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2 test2=new Test2();
//调用test方法时,需要传入一个Product参数
//参数传入其匿名实现类的实例
test2.test(new Product() {

@Override
public double getPrice() {
// TODO Auto-generated method stub
return 4999;
}

@Override
public String getName() {
// TODO Auto-generated method stub
return "联想PC";
}
});

InTest2 inTest2=new InTest2();
System.out.println("购买:"+inTest2.getName()+",单价:"+inTest2.getPrice());
}
}

//可以拆分成一下代码
class InTest2 implements Product
{

@Override
public double getPrice() {
// TODO Auto-generated method stub
return 4999;
}

@Override
public String getName() {
// TODO Auto-generated method stub
return "联想PC";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: