成员内部类:在一个类的内部再写一个类
- 里面的类称为内部类(Inner),外面的称为外部类(Outer)
- 内部类通常只服务于外部类,对外不具备可见性
- 内部类通常是在外部类中创建的
- 内部类中可以直接访问外部类中的所有成员(包括私有的),内部类有一个隐式的引用指向了创建它的外部类对象(外部类名.this.)
package test;
public class IOClass {
private Integer out;
private String usernameO;
public String getUsernameO() {
return usernameO;
}
public void setUsernameO(String usernameO) {
this.usernameO = usernameO;
}
public static void main(String[] args) {
IOClass io=new IOClass();
Inner in0=new IOClass().new Inner();
in0.hello();//结果:内部类调用外部类私有数据:null
io.setUsernameO("我很帅!!!!");
Inner in=io.new Inner();
in.hello();//结果:内部类调用外部类私有数据:我很帅!!!!
}
public class Inner{
private Integer in;
private String usernameI;
public String getUsernameI() {
return usernameI;
}
public void setUsernameI(String usernameI) {
this.usernameI = usernameI;
}
public void hello(){
String i=usernameO;//外部类私有数据
System.out.println("内部类调用外部类私有数据:"+i);
}
}
}
匿名内部类:
- 若想创建一个类的对象,并且对象只被创建一次,此时该类不必命名,称之为匿名内部类
- jdk1.7(含)版本之前,匿名内部类中想访问外面的变量,要求该变量必须被final修饰
package test;
public class IClass {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public static void main(String[] args) {
IClass ic=new IClass(){
public void setUsername(String username){
System.out.println("该方法在匿名内部类中被"+username+"重写了");
}
};
ic.setUsername("源者鬼道");
}
}
注:匿名内部类通常被用于创建接口/抽象类的派生类对象
注:文章全部内容是作者的学习经验总结,如果有不完美的地方,还请联系编者修改,亦或是你的疑惑编者在此处并未涉及到,也可以联系编者进行解答,完善。在此也欢迎更多的你加入我们。
加入我们,或是帮助我们改进,请扫: