内部类与匿名内部类
来源:互联网 发布:mysql数据库备份和恢复 编辑:程序博客网 时间:2024/06/05 03:06
一 内部类
类中嵌套类叫内部类,包含内部类的类叫外部类;
内部类使用static 修饰叫静态内部类外部类可以使用内部类;
外部类中静态函数不能使用new创建内部类的对象(只能创建引用类型变量),创建静态内部类对象例外;
内部类可以任意方式使用外部类;
内部类可以使用任何访问权限修饰符修饰;
内部类的访问权限对外部类没有任何约束;
内部类可以使用其它类
其它类使用内部类时受内部类的访问权限修饰符约束,约束规则与外部类的成员一样;
其它类可以创建内部类的引用类型变量,但是只能创建静态内部类的对象;
示例:
//Hello叫外部类、Stu叫内部类
public class Hello {
public void m() {
Stu stu = new Stu();
stu.study();
}
public static void main(String[] args) {
new Hello().m();
}
class Stu {
public void study() {
System.out.println("Stu study()....");
}
}
}
二 匿名内部类
(1)匿名内部类是在一个类中写一个没有名子的子类,或没有名字的接口实现类,并且直接创建了对象;
(2)匿名内部类的父类可以是普通类;
示例:
public class Stu {
public void study() {
System.out.println("good good study");
}
public void sleep() {
System.out.println("sleep");
}
}
public class Hello {
public Stu stu = new Stu() {
};
public static void main(String[] args) {
Hello h = new Hello();
h.stu.study();
h.stu.sleep();
}
}
public class Hello2 {
public Stu stu = new Stu() {
@Override
public void study() {
System.out.println("好好学习");
}
};
public static void main(String[] args) {
Hello2 h = new Hello2();
h.stu.study();
h.stu.sleep();
}
}
(3)匿名内部类的父类可以是抽象类
public abstract class Stu {
public void study() {
System.out.println("good good study");
}
public void sleep() {
System.out.println("sleep");
}
public abstract void go();
}
public class Hello {
public Stu stu = new Stu() {
@Override
public void study() {
System.out.println("好好学习");
}
@Override
public void go() {
System.out.println("走....");
}
};
public static void main(String[] args) {
Hello h = new Hello();
h.stu.study();
h.stu.sleep();
h.stu.go();
}
}
(4)匿名类部类是接口的实现类
public interface Inf {
public abstract void go();
}
public class Hello {
public Inf inf = new Inf() {
@Override
public void go() {
System.out.println("go");
this.xx();
}
public void xx() {
System.out.println("xx");
}
};
public static void main(String[] args) {
Hello h = new Hello();
h.inf.go();
//h.inf.xx();//错
}
}
(5)前面匿名内部类对象都是为外部类的成员变量赋值,实际上匿名内部类对象也可以为外部类函数中的局部变量赋值
public interface Inf {
public abstract void go();
}
public class Hello {
private void test() {
Inf inf = new Inf() {
@Override
public void go() {
System.out.println("go()...");
}
};
}
}
三 内部类中访问外部类对象
内部类函数中的this表示内部类对象,要得到外部类对象可使用"外部类名.this",所以访问外部类对象成员格式为:
"外部类名.this.外部类成员"
public interface Inf
{
public abstract void go();
}
public class Hello {
public int x = 100;
public void m1() {
System.out.println("m1....");
}
private void test() {
Inf inf = new Inf() {
public int x = 20;
@Override
public void go() {
System.out.println("go()...");
Hello.this.m1();
m1();
System.out.println(Hello.this.x);//100
System.out.println(Hello.this.x);//20
}
};
}
}
- 内部类与匿名内部类
- 内部类与匿名内部类
- Java内部类与匿名内部类
- JAVA内部类 与 匿名内部类
- 内部类 匿名内部类与接口
- Java 内部类与匿名内部类
- Java 内部类与匿名内部类
- Java内部类与匿名内部类
- Java -> 内部类与匿名内部类
- 内部类与匿名内部类区别
- 内部类、匿名内部类
- 内部类、匿名内部类
- 内部类,匿名内部类
- 内部类(匿名内部类)
- 内部类 ---匿名内部类
- 内部类,匿名内部类
- 匿名类与内部类
- 封装与匿名内部类
- 如何学习
- PHP服务器变量$_SERVER详解
- 安装CentOS
- openfire plugin 编译单个插件
- 灰度以及灰度图像
- 内部类与匿名内部类
- spring事务传播机制实例讲解
- hdu 绝对值排序
- WebApi自宿主应用
- Java中的乱码问题
- ztree的菜单显示与easyUI动态选项卡
- 最牛B的编码套路
- TF-IDF算法
- java socket