1.静态内部类:
理解方法:大家可以把静态内部类想想成一个静态方法,这样理解就容易多了。
demo:
package com.InnerClass;
/**
*auther:fighter24h
*email:645707787@qq.com
*静态内部类
*/
public class StaticClassDemo {
public static void main(String[] args) {
// 调用静态内部类
Demo.Inner inner = new Demo.Inner();
inner.sayHallo();
}
}
//静态内部类测试
class Demo
{
public static int data = 4;
/**
*
* @author fighrer24h
*静态内部类:
*大家可以把静态内部类想想成一个静态方法来使用
*/
public static class Inner
{
public void sayHallo()
{
System.out.println("hallo");
}
}
}
2.成员内部类
理解方法:大家可以将成员内部类理解成成员变量,使用的时候也是按照成员变量的方式使用的
demo:
package com.InnerClass;
/**
*auther:fighter24h
*email:645707787@qq.com
*/
public class MemberInnerClass {
public static void main(String[] args) {
MemberClassDemo mcd = new MemberClassDemo();
// 成员内部类的使用方法
/**
* 将成员内部类理解成一个成员变量即可:
* 可以这样想:
* 如果对象没有外层的类没有实例化,我们是没有办法使用我们的public的成员变量的
* 所以,我们首先要初始化我们外层的类
* 然后,由于我们的“成员是一个类”,所以,我们使用的方式应该是new出来
* 那么应该如何new呢?既然是当成一个成员来用,当然是按照如下的方法使用了!
*/
mcd.new MemberClass().say();
// 或者
MemberClassDemo.MemberClass inner = new MemberClassDemo().new MemberClass();
inner.say();
}
}
//成员内部类的定义方法
class MemberClassDemo
{
private String message = "hallo";
/**
* @author fighter24h
*将成员内部类理解成一个成员变量即可!
*/
public class MemberClass
{
public void say()
{
System.out.println(message);
}
}
public class MemberClass2
{
private String message = "word";
public void say()
{
// 此时我们访问的是 "word"
System.out.println(message);
// 而如何访问外部类与内部类同名的变量呢?使用如下方法即可 , 此时访问的是 "hallo"
System.out.println(MemberClassDemo.this.message);
}
}
}
3.局部内部类
理解:将局部内部类理解成一个局部变量即可,并且注意,局部内部类只能访问访问一个终态的变量,为什么呢?
解释如下:
(1)首先,即便是局部内部类,那也是一个类。
(2)我们的局部内部类没有初始化的时候,怎么知道局部变量的值是什么呢?这里涉及到了jvm大家不理解也没有太多的关系
package com.InnerClass;
/**
*auther:fighter24h
*email:645707787@qq.com
*局部内部类
*/
public class LocalClassDemo {
public static void main(String[] args) {
LocalClass lc = new LocalClass();
lc.say();
}
}
class LocalClass
{
public void say()
{
/**
*
* @author fighter24h
*局部内部类:
*将局部内部类理解成一个局部变量就可以了
*局部内部类使用较少,由于局部内部类类似于一个局部变量
*所以我们没有办法在外部访问到局部变量
*/
class Demo
{
public void sayWhat()
{
System.out.println("Local Inner Class");
}
}
/**
* 所以,局部内部类的使用也只能是如下方法
*/
Demo demo = new Demo();
demo.sayWhat();
}
}
4.匿名内部类
理解:匿名内部类就是没有名字的内部类
使用方法:
public void method(new Father(){.....})
{
}