文章目录
内部类的类型及使用
【内部类】 类–>里面–>定义类
OuterClass$InnerClass.class 命名----外部类名$内部类名
内部类(寄生类),外部类(宿主类)
内部类(static) ---- 寄生于外部类本身。
内部类(非static) ---- 寄生于外部类实例中(new 外部类())。
内部类可以访问外部类所有的成员(private),但是反过来外部类是不能访问内部类成员(实现更高级的封装)。
原因:接口出现(多继承)。
1、可以实现一个类继承多个类,外部类继承一个,内部类继承一个。
2、可以实现一个类针对一个父类继承多次,在外部类给出一个重写的方法,内部类还可以再给出另外一套重写的方法。
1、实例内部类(非static) 不能定义static的成员。
2、类内部类(static) 可以定义static成员,也可以访问外围static成员。
3、局部内部类----在一个类中的方法,需要通过设计一个类来解决复杂问题,可以将这个类设置为方法内的内部类。
package com.sram.noname;
interface NameUtil{
void sayHello();
}
class Student{
private String name; //学生姓名
public NameUtil setName(String _name){ //传入过长(5个字符) stevej... Tom
class StudentName implements NameUtil{
public StudentName(String n){
if(n.length() > 5){
name = n.substring(0, 5)+"...";
}else{
name = n;
}
}
@Override
public void sayHello() {
System.out.println("Hello "+name);
}
}
return new StudentName(_name); //NameUtil n = new StudenName();
}
}
public class FunClassCode {
public static void main(String[] args) {
Student s = new Student();
NameUtil n = s.setName(“Tom”);
n.sayHello();
}
}
4、匿名内部类(多,Swing图形化界面(事件))
之前 AWT 做界面。 Frame
之后Swing 做界面。 JFrame
java.awt.*;
javax.swing.*; javax 扩展。 在Java的swing类中,添加事件和监听会使用匿名内部类的方法添加。
btn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("OKOK");
}
});