基本上已经把thinking in java内部类部分学完了
内容比较多 整理下思路
简单的分类
内部类(inner class)
-> 匿名内部类
-> 域内部类(local class)
-> 嵌套内部类(nesting class)
1. 一般的内部类
class A
{
private class B{}
}
特点:
> 可以使用外围内的方法和属性
> 无法定义static变量和方法
> 可以有private和protected访问修饰符(非inner class的类只有public和default2种访问修饰符)
> 在内部类中使用[外部类].this 语法可以获得该内部类的外部类引用
2. 域内部类
class A
{
{
class B{}
}
}
或
class A
{
void f()
{
int i=0;
class B{}
}
}
特点:
> 出了域的范围就无法访问, 比如在方法f()中的内部类, 在方法f()外的地方无法被访问
> 如果使用了局部变量(非外围内成员变量) 则该局部变量必需为final, 如class B想使用f()方法中的变量i
则i必需为final
3. 匿名内部类
class A{}
class B
{
public getA()
{
return new A(){};
}
}
4. 嵌套内部类: 就是嵌套的内部类为static class
class A
{
public static class B{}
}
特点: 可以在内部类中定义static方法和变量
继承一个内部类
继承一个内部类时 需要使用到特殊语法来获得其外围类对象
class A
{
class InnerA{}
}
class B extends InnerA
{
public B(A a)//class B constructor
{
a.super();//使用这个语法编译时才不会报错
}
}
也有种不需要这种语法的情况, 如下
class A{}
class B
{
public getA()
{
return new A(){};
}
}
class A
{
class InnerA{}
}
class B extends A
{
class InnerB extends InnerA{}
}
此时InnerB虽然继承了InnerA, 但是由于其外围类B亦继承了A,
所以就不需要在InnerB的构造器中使用<外围类>.super()的语法了
心得体会:
1. 内部类实现了真正的多继承
//内部类实现多继承的示例
class Shape
{
void drow(){}
}
class Ashape
{
public class Rectangle extends Shape//长方形继承Shape
{
void drow()
{
System.out.println("a rectangle");
}
}
public Shape getTriangle()//方法getTriangle返回一个Shape
{
class Triangle extends Shape//三角形继承Shape
{
void drow()
{
System.out.println("a triangle");
}
}
return new Triangle();
}
public Shape getCircle()//匿名内部类 实际是构造了一个circle继承Shape
{
return new Shape()
{
void drow()
{
System.out.println("a circle");
}
};
}
}//class Ashape end~
public class TestInnerclassExtends//该类用于测试Ashape
{
public static void main(String args[])
{
Ashape a=new Ashape();
Ashape.Rectangle rec=a.new Rectangle();//构建一个内部类实例的语法
rec.drow();
a.getTriangle().drow();
a.getCircle().drow();
}
}
输出结果:
a rectangle
a triangle
a circle
分享到:
相关推荐
1. 对于成员内部类和静态嵌套类,可以通过`new OuterClass().new InnerClass()`或`OuterClass.InnerClass inner = new OuterClass().new InnerClass();`来实例化。 2. 局部内部类和匿名内部类只能在定义它们的方法...
可以通过"OuterClass.InnerClass"的方式引用静态成员类,如`new Outer.Inner1()`。 6. **使用场景** - 当需要创建一个与外部类紧密相关的辅助类,并且希望这个类在没有外部类实例的情况下也能存在时,可以使用...
内部类(Inner Class)是Java语言中一个独特的特性,它允许在一个类的内部定义另一个类。这种设计模式在处理特定问题时提供了更大的灵活性,比如实现事件监听器、封装复杂逻辑或者创建私有的辅助类。本章我们将深入...
OuterClass.InnerClass innerObj = outerObj.new InnerClass(); ``` #### 三、访问权限 内部类和静态嵌套类都可以声明不同的访问权限,包括`public`、`protected`、`package-private`(默认访问权限)、`private...
匿名内部类 inner class 马克-to-win java视频的详细介绍
匿名内部类 inner class 马克-to-win java视频的详细介绍
Anonymous Inner Class (匿名内部类) 是否可以 extends(继承)其它类?匿名内部类是没有名字的内部类。不能 extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。 final 修饰符(关键字)...
在“java_innerclass_instance.rar_innerclass”这个压缩包中,包含的资源可能是一个关于Java内部类实例应用的示例代码。 内部类主要有四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。这里我们主要...
Java面向对象(高级)-- 类的成员之五:内部类(InnerClass)
内部类分为四种类型:成员内部类、静态嵌套类、方法内部类和匿名内部类。 1. 成员内部类: 成员内部类就像外部类的成员变量一样,可以访问外部类的所有成员。但是,成员内部类不能包含静态成员,因为它们依赖于...
嵌套类主要分为两大类:静态嵌套类(Static Nested Class)和非静态嵌套类(Non-static Nested Class),后者通常被称为内部类(Inner Class)。 - **静态嵌套类**:此类嵌套类被声明为`static`,因此它们与外部类...
匿名内部类 inner class 马克-to-win java视频的详细介绍
OuterClass.InnerClass inner = outer.new InnerClass();` 4. **作用场景**: - 静态内部类常用于封装与外部类相关联的工具类或辅助类,这些类不依赖于外部类的实例状态,而是与外部类的类级别信息有关。 - 非...
局部内部类 Local inner 马克-to-win java视频的详细介绍
创建静态内部类的实例时,无需先创建外部类的实例,而是通过外部类名直接创建,如 `OuterClass.InnerClass inner = new OuterClass.InnerClass();`。 2. 成员内部类(Member Inner Class) 成员内部类不带 `static...
根据不同的应用场景和特性,内部类可以分为多种类型:成员内部类、局部内部类、静态内部类、匿名内部类。下面将详细介绍每种类型的内部类及其特点和使用方法。 #### 成员内部类 成员内部类(也称为非静态内部类)...
Java内部类是Java语言特性中一个独特而强大的部分,它允许在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现某些特定设计模式时非常有用。本篇文章将深入探讨Java中的...
在示例3中,`LocalInnerClassTest`类的`main()`方法内定义了一个局部内部类`InnerClass`,并使用`final`变量`a`,然后在方法内部创建并调用了`InnerClass`的方法。 4. 匿名内部类(Anonymous Inner Class) 匿名...
### 内部类的相关知识-静态内部类,匿名内部类…… #### 一、内部类概述 内部类(Inner Class)是 Java 中一种特殊类的定义方式,它允许在一个类的内部定义另一个类。这种设计模式提供了更为灵活的编程机制,可以...