内部类的作用
补充外部类的功能
内部类名词介绍
内部类:类中定义的类
外部类:没在类中定义的类如:
public class A{
public class B{
}
}
A就是外部类
B就是内部类
内部类分类
成员内部类:
在类中方法以外定义的类就是成员内部类
静态内部类:
用static修饰的成员内部类就是静态内部类
局部内部类
在方法中定义的类就是局部内部类
匿名内部类
在值或实参中定义的类就是匿名内部类,没有类名的内部类
成员内部类
如:
public class A{
public class B{
}
}
注意:成员内部类不能定义静态成员,包括但不限于静态属性,静态方法,静态代码块成员内部类创建对象:
1,在外部类的非静态方法中
直接创建内部类对象
语法:
内部类类名 对象名 = new 内部类类名(实参列表);
2,在其他情况呀
先创建外部类对象,在通过外部类对象创建内部类对象
语法:
1,创建外部类对象
外部类类名 外部类对象名 = new 外部类类名(实参列表);
2,创建内部类对象
内部类类名 内部类对象名 = 外部类对象名.new 内部类类名(实参列表);
成员内部类中局部变量,内部类属性,外部类属性重名如何区分?
局部变量:直接书写,使用就近原则
内部类属性:this.属性名
外部类属性:外部类类名.this.属性名
静态内部类
如:
public class A{
public static class B{
}
}
注意:外部类不能用static修饰静态内部类创建对象
内部类类名 内部类对象名 = new 外部类类名.内部类类名(实参列表);静态内部类中不能直接使用外部类的非静态成员
局部内部类
如:
public class A{
public void test(){
class B{
}
}
}
注意:
1,只能在当前方法中使用
2,局部内部类没有访问权限修饰符
3,局部内部类中不能定义静态成员
创建局部内部对象:
语法:
内部类类名 内部类对象名 = new 内部类类名(实参列表);
注意:
1,只能在当前方法中用
2,必须在定义局部内部类后使用
局部内部类中局部变量,内部类属性,外部类属性重名如何区分?
局部变量:直接书写,使用就近原则
内部类属性:this.属性名
外部类属性:外部类类名.this.属性名
匿名内部类
说明:在类中定义的一个没有类名的内部类
注意:
1,匿名内部类只能创建一个该类对象
2,使用位置在值或者实参中
3,必须有父类或要实现的接口
4,匿名内部类的使用百分之80伴随接口回调
案例:点击按钮
类
按钮:Button
属性:存储该按钮点击后执行的事件
方法:
设置点击事件:setOnClick
点击:click
执行点击事件
接口OnClickListener
点击事件:onClick
测试类:
main
1,创建按钮对象
2,创建点击事件的接口对象
2.1找一个类实现OnClickListener接口
2.2创建2.1中的类对象
2.3将2.2中的对象转换为接口对象
3,使用按钮对象调用设置点击事件
4,使用按钮对象调用点击方法,模拟用户点击
优点:
1,节省一个类名
2,方便代码书写
缺点:
导致代码结果混乱,难以阅读
语法:
new 父类/接口(){
重写的方法
}
使用场景:
1,获取一个接口或抽象类对象
2,调用方法时,参数需要一个接口对象或抽象类的对象