JavaSE
内部类
定义:如果一个类定义在另一个类的内部,称之为内部类
使用:创建内部类的之后需要在内部类前面添加外部类进行修饰
InnerClassDemo.InnerClass innerClass = new InnerClassDemo().new InnerClass();
特点:
1.内部类可以方便的访问外部类的私有属性
2.外部类不能直接访问内部类的属性,但是可以通过创建对象的方式使用
3.内部类中不能定义静态属性
4.当外部类属性和内部类相同时默认访问内部类的属性,如果需要访问外部类需要添加外部类类名.this.属性
InnerClassDemo
public class InnerClassDemo {
public void print(){
System.out.println("InnerClassDemo");
}
//内部类
class InnerClass{
public void print(){
System.out.println("InnerClass");
}
}
}
InnerClassTest
public class InnerClassTest {
public static void main(String[] args) {
InnerClassDemo innerClassDemo = new InnerClassDemo();
innerClassDemo.print();
//内部类
InnerClassDemo.InnerClass innerClass = new InnerClassDemo().new InnerClass();
innerClass.print();
}
}
分类:
- 匿名内部类:当定义了一个类实现了某个接口,在使用过程中只需要使用一次没有其他用途为了考虑代码的简洁可以不考虑创建具体的类,而采用*new interface(){添加未实现的方法}*就叫做匿名内部类
public class NoNameInnerCLassDemo {
public static void main(String[] args) {
System.out.println("有一万行代码");
new Thread(new Runnable() {
@Override
public void run() {java
System.out.println("匿名内部类");
}
}){
};
System.out.println("有一万行代码");
}
}
- 静态内部类:在内部类中可以定义静态内部类,使用static关键字进行修饰,使用规则:外部类 类引用名称 = new 外部类.内部类();
public class StaticClass {
private int id = 1;
public void test(){
System.out.println("test");
}
static class InnerClass{
private String name;
public void show(){
System.out.println("show");
}
}
public static void main(String[] args) {
InnerClass innerClass = new StaticClass.InnerClass();
}
}
- 方法内部类:在外部类的方法中也可以定义类,此时叫做方法内部类(了解即可),此外只能在方法内部进行对象的创建
package com.zc;
public class MethodInnerClass {
public void show(){
System.out.println("show");
class InnerClass{
}
new InnerClass();
}
}