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

Java 内部类的使用!

2011-11-29 08:21 148 查看
本人做java 也算是半路出家的没有像专科生那样系统的学习java,所以对一些概念的东西不是很在行或者一不常用的东西有点模糊正好最近有点时间就想重新了解一些基础的东西,今天主要了解内部类的使用!

1,概述

内部类是指在一个外部类的内部再定义一个类。

内部类作为外部类的一个成员,并且依附于外部类而存在的。

内部类可为静态,可用PROTECTED和PRIVATE修饰。(而外部类不可以:外部类只能

使用PUBLIC和DEFAULT)。

2,分类

成员内部类、

局部内部类、

静态内部类、

匿名内部类(图形是要用到,必须掌握)。

内部类的使用的优缺点:

优点:减少了在类文件编译后的产生的字节码文件的大小

缺点:使程序结构不清晰

java内部类有什么好处?为什么需要内部类?

  首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口。由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能。

  不过你可能要质疑,更改一下方法的不就行了吗?

  的确,以此作为设计内部类的理由,实在没有说服力。

  真正的原因是这样的,java中的内部类和接口加在一起,可以的解决常被C++程序员抱怨java中存在的一个问题没有多继承。实际上,C++的多继承设计起来很复杂,而java通过内部类加上接口,可以很好的实现多继承的效果。

public class InnerCls {

public String str="this a not static property!";

public static String stastr="this a static property";

/**static Inner Class*/
static class StaInner{

public static void doSomthing(){
System.out.println("static method >>"+stastr);
System.out.println("**********line******************");
}
public void testSomthing(){
System.out.println("no static method >>"+stastr);
}
}

/**not static inner 不能有static 方法 */
class Inner{
public void doSomething(){
System.out.println("#########################");
System.out.println(str);
System.out.println(stastr);
}
}
public static void main(String[] args) {
/**for static inner Class*/
InnerCls.StaInner.doSomthing();

InnerCls.StaInner is=new InnerCls.StaInner();

is.testSomthing();

/**for not static inner Class*/
InnerCls ics=new InnerCls();
Inner ii= ics.new Inner();
ii.doSomething();

}

}


package com.lean.innercls.used;

public class OuterFInCls {
	public static void main(String[] args) {
		Outer outer=new Outer();
		outer.makeInner();
	}

}
class Stu{
	public void print(){
		System.out.println("this is a stu");
	}
}
class Course{
	public void print(){
		System.out.println("this is a course");
	}
}
/**实现多继承  或者有同名的方法也可以利用内部类来实现*/
class Outer extends Course{
	private String outerName="fkinn";
	class Inner extends Stu{}
	
	public void makeInner(){
		Inner inner=new Inner();
		inner.print();
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: