java学习笔记-匿名内部类
一、概述
定义:在一个类中定义一个类
语法格式: 外部类名.内部类名 对象名 = new 外部类对象().new 内部类对象();
内部类 可以直接使用外部类的成员变量 包括私有成员变量
按照内部类在类中定义的位置不同可以分为以下两种形式:
1. 在类中的成员位置:成员内部类
2. 在类中的局部位置:局部内部类
package com.ustc.test4;
public class xxx {
public static void main(String[] args) {
//匿名内部类的理解:将继承/实现 方法重写 创建对象 放在了一步进行
//如果接口中存在多个需要重写的方法 那么使用接口的引用 这样一多态的形式 调用多个方法
Inter i = new Inter(){
@Override
public void show(){
System.out.println("匿名类中的show方法");
}
};
i.show();
}
}
interface Inter{
void show();
}
class InterImpl implements Inter{
@Override
public void show()
{
System.out.println("重写show方法");
}
}
二、成员内部类
private: 在自己所在的外部类中创建对象进行访问
package com.ustc;
public class TestInnerClass {
public static void main(String[] args) {
//这种写法是错误的 会报错 因为innner是私有类 不可以直接进行访问
//Outer.Inner i = new Outer().new Inner();
Outer o = new Outer();
o.method();
}
}
class Outer{
//成员内部类 这样的话 其他类 就不可以直接进行访问
private class Inner{
public void show(){
System.out.println("Inner show");
}
}
public void method(){
Inner i = new Inner();
i.show();
}
}
三、静态成员内部类
- 静态成员内部类访问格式 : 外部类名.内部类名 对象名 = new 外部类名.内部类名
- 静态成员内部类中的静态方法:外部类名.内部类名.方法名();
四、局部内部类
方法中定义的类 外界无法直接使用 需要在方法内部创建对象并进行使用该类可以直接访问外部类的成员 也可以访问方法内的局部变量
package com.ustc.test4;
public class xxx {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
class Outer{
int a = 10;
public void method(){
int b = 20;
//方法内部创建类 局部内部类
class Inner{
public void show(){
System.out.println("show.....");
System.out.println(a); //局部内部类 可以直接访问外部类成员变量
System.out.println(b);
}
}
Inner i = new Inner();
i.show();
}
}
五、匿名内部类
概述:本质上是一个特殊的局部内部类 (定义在方法内部)
前提:需要存在一个接口或者类
格式:
New 类名或者接口名(){
重写方法;
}
package com.ustc.test4;
public class xxx {
public static void main(String[] args) {
//匿名内部类的理解:将继承/实现 方法重写 创建对象 放在了一步进行
//如果接口中存在多个需要重写的方法 那么使用接口的引用 这样一多态的形式 调用多个方法
Inter i = new Inter(){
@Override
public void show(){
System.out.println("匿名类中的show方法");
}
};
i.show();
}
}
interface Inter{
void show();
}
class InterImpl implements Inter{
@Override
public void show()
{
System.out.println("重写show方法");
}
}