内部类的种类:(成员、局部、静态、匿名)
1.成员内部类
2.局部内部类
3.静态内部类
4.匿名内部类
内部类的实现方式:
自己:
一种是类中类
:
Public class person
{
Class student
{
Public void getSome()
{
System.out.println(“我是内部类!”);
}
}
}
一种是匿名类:
Public class person
{
Public voidgetSome(new student(){
System.out.println(“我是内部类!”);
)
});
}
网上正解:
1:成员内部类:
//成员内部类......相当于非静态方法
class MemberInner {
private int a = 3;
public class Inner2 {
private int a = 2;
public void doSomething() {
// 调用外部类的属性
System.out.println(MemberInner.this.a);// 这块要注意......很重要!!!
System.out.println(a);
}
}
}
public class Test3 {
public static void main(String[] args) {
MemberInner.Inner2 inner2 = new MemberInner().new Inner2();// 非静态内部类要new实例
inner2.doSomething();
}
}
2:局部内部类;
//局部内部类......相当于局部变量
class LocalInner {
public void doSomething(int b) { //写到方法里面的类,有什么用呢?
final int a = 3;// 只能访问final的变量
class Inner3 {
public void test(int b) {
System.out.println(b);
System.out.println(a);
}
}
new Inner3().test(b);
}
}
public class Test4 {
public static void main(String[] args) {
LocalInner inner = new LocalInner();
inner.doSomething(4);
}
}
3:静态内部类;
//静态内部类......相当于静态方法
class StaticInner{
private static int a=3;
public static class Inner{
public void test(){
System.out.println(a);
}
}
}
public class Test2 {
public static void main(String[] args) {
StaticInner.Inner inner=new StaticInner.Inner();//静态内部类直接调用
inner.test();
}
}
4:匿名内部类
Public class person
{
Public void getSome(new student(){
System.out.println(“我是内部类!”);
)
});
}
内部类的好处:
真正的原因是这样的,java中的内部类和接口加在一起,可以的解决常被C++程序员抱怨java中存在的一个问题——没有多继承。实际上,C++的多继承设计起来很复杂,而java通过内部类加上接口,可以很好的实现多继承的效果。
内部类:一个内部类的定义是定义在另一个内部的类。
原因是:
1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。
2. 对于同一个包中的其他类来说,内部类能够隐藏起来。
3.匿名内部类可以很方便的定义回调。
4.使用内部类可以非常方便的编写事件驱动程序