Java基础_面向对象_ 内部类,成员内部类,局部内部类,匿名内部类_16
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java基础_面向对象_ 内部类,成员内部类,局部内部类,匿名内部类_16,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3610字,纯文字阅读大概需要6分钟。
内容图文
内部类
为什么需要内部类?
` ⒈ 内部类对象可以访问创建它的对象的实现,包括私有数据;
⒉ 内部类不为同一包的其他类所见,具有很好的封装性;
⒊ 使用内部类可以很方便的编写事件驱动程序;
⒋ 匿名内部类可以方便的定义运行时回调;
5.内部类可以方便的定义
成员内部类
- 类的组成:属性,方法,构造器,代码块(普通块,静态块,构造块,同步块),内部类
- 一个类TestOuter的内部的类SubTest叫内部类, 内部类 :SubTest 外部类:TestOuter
- 内部类:成员内部类 (静态的,非静态的) 和 局部内部类(位置:方法内,块内,构造器内)
- 成员内部类:
-
里面属性,方法,构造器等
-
修饰符:private,default,protect,public,final,abstract
- 内部类可以访问外部类的内容,它可以访问它的外部类的所有成员变量和方法,不管是静态的还是非静态的都可以。
- 静态内部类中只能访问外部类中被static修饰的内容
- 外部类想要访问内部类的东西,需要创建内部类的对象然后进行调用
- 内部类和外部类属性重名的时候,如何进行调用:
System.out.println(age);//访问方法体的属性
System.out.println(this.age);//访问内部类的属性
System.out.println(TestOuter.this.age);//访问外部类的属性1
- 创建内部类的对象:
//创建外部类的对象
TestOuter to = new TestOuter();
to.a();
//创建内部类的对象:
//静态的成员内部类创建对象
TestOuter.E e = new TestOuter.E();
//非静态成员内部类创建对象
TestOuter to2 = new TestOuter();
TestOuter.D d = to2.new D();`
- 详解:
在外部类里面创建成员内部类的实例:this.new B();
在外部类之外创建内部类的实例:(new TestOuter()).new B().go();
代码:
//类的组成:属性,方法,构造器,代码块(普通快,静态块,构造块,同步块),内部类
//一个类TestOuter的内部的类SubTest叫内部类,内部类:SubTest 外部类:TestOuter
//内部类:成员内部类和局部内部类(位置:方法内,块内,构造器内)
//成员内部类:
// 里面属性,方法,构造器
// 修饰符:private,protected,default,public,final,abstract
public class TestOuter {
//成员内部类
class D{
int age = 20;
String name;
public void method(){
//内部类可以访问外部类的属性
/*System.out.println(age);
a();*/
int age = 30;
System.out.println(age);//30
System.out.println(this.age);//20
System.out.println(TestOuter.this.age);//10
}
}
//静态成员内部类
static class E{
public void method(){
//静态内部类中只能访问外部类中被static修饰的内容
/*System.out.println(age);
a();*/
}
}
int age = 10;
public void a(){
System.out.println("这是a方法");
{
System.out.println("这是普通快");
class B{
}
}
class A{
}
//外部类想要访问内部类的东西,需要创建内部类的对象然后进行调用
D d = new D();
System.out.println(d.name);
d.method();
}
static {
System.out.println("这是静态块");
}
{
System.out.println("这是构造块");
}
public TestOuter(){
class C{
}
}
public TestOuter(int age) {
this.age = age;
}
}
class Demo{
public static void main(String[] args) {
//创建外部类的对象
TestOuter to = new TestOuter();
to.a();
//创建内部类的对象:
//静态的成员内部类创建对象
TestOuter.E e = new TestOuter.E();
//非静态成员内部类创建对象
TestOuter to2 = new TestOuter();
TestOuter.D d = to2.new D();
}
}
局部内部类
- 在局部内部类中访问到的变量必须是被final修饰的
- 如果类B在整个项目中只使用一次,那么就没有必要单独创建一个B类,使用内部类就可以了
- 匿名内部类
public class TestOuter {
//1.在局部内部类中访问到的变量必须是被final修饰的
public void method(){
final int num = 10;
class A{
public void a(){
//num = 20;
System.out.println(num);
}
}
}
//2.如果类B在整个项目中只使用一次,那么就没有必要单独创建一个B类,使用内部类就可以了
public Comparable method2(){
class B implements Comparable{
@Override
public int compareTo(Object o) {
return 100;
}
}
return new B();
}
public Comparable method3(){
//3.匿名内部类
return new Comparable(){
@Override
public int compareTo(Object o) {
return 200;
}
};
}
public void teat(){
Comparable com = new Comparable(){
@Override
public int compareTo(Object o) {
return 200;
}
};
System.out.println(com.compareTo("abc"));
}
}
匿名内部类
内容总结
以上是互联网集市为您收集整理的Java基础_面向对象_ 内部类,成员内部类,局部内部类,匿名内部类_16全部内容,希望文章能够帮你解决Java基础_面向对象_ 内部类,成员内部类,局部内部类,匿名内部类_16所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。