Java中的内部类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中的内部类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3068字,纯文字阅读大概需要5分钟。
内容图文
![Java中的内部类](/upload/InfoBanner/zyjiaocheng/737/6f752ba6a6a14852895e2a973b129655.jpg)
一,静态内部类
它是用static修饰的,在访问限制上它只能访问外部类中的static所修饰的成员变量或者是方法
public class OuterClass1 { private String name1; private static String name2; public static class InnerClass{ public void sayHello(){ System.out.println("hello "+name2); } public void getOuterName(String name){ //静态内部类不能应用外部类的非静态的长远变量 //name1 = name; } public static void test(){ System.out.println("内部static方法"); } } public static void main(String[] args) { InnerClass.test(); InnerClass innerClass = new InnerClass(); innerClass.sayHello(); } }
二,成员内部类
成员内部类是最普通的内部类,它可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
public class OuterClass2 { private String name; private static String name2; public OuterClass2(String name){ this.name = name; } /** * 方法内部类访问外部类变量时,无论外部类变量时静态或非静态,若变量名相同,则用“外部类名.this.变量名” * 若不相同,直接用变量名进行访问。和成员内部类相似。 * 若果方法名相同,也是一样到道理 外部类名.this.方法名称()。 */ public class InnerClass{ public void sayHello(){ System.out.println("hello "+name); } public void getOuterName(String name){ OuterClass2.this.name = name; } //内部类为成员变量时,非静态时,不能有静态方法 // public static void test(){ // System.out.println("内部static方法"); // } } public InnerClass getInnerClass(){ return new InnerClass(); } public static void main(String[] args) { //不能从静态方法中创建InnerClass //InnerClass innerClass = new InnerClass(); OuterClass2 outerClass2 = new OuterClass2("李四"); InnerClass innerClass1 = outerClass2.getInnerClass(); innerClass1.sayHello(); } }
当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:
? ? 外部类.this
.成员变量
外部类.
this
.成员方法
三,局部内部类
局部内部类是定义在外围类的方法中的,在访问的时候它可以直接访问外围类的所有成员!但是不能随便访问局部变量,除非这个局部变量被final修饰。
public class OuterClass3 { private String name; private static String name2 = "张三"; public OuterClass3(String name){ this.name = name; } public void foo(){ final int i = 22; class InnerClass{ public void test(){ System.out.println(i); System.out.println(name); System.out.println(name2); } } InnerClass innerClass = new InnerClass(); innerClass.test(); } public static void main(String[] args) { OuterClass3 outerClass3 = new OuterClass3("Jack"); outerClass3.foo(); } }
四,匿名内部类
1、匿名内部类其实就是局部内部类的简写格式,只能使用一次。
2、定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。
3、匿名内部类的格式: new 父类或者接口(){定义子类的内容}
4、其实匿名内部类就是一个匿名子类对象,可以理解为带内容的对象。
5、匿名内部类中定义的方法最好不要超过3个。
public interface Sender { public void send(); }
public class EmailSender { public Sender method(){ return new Sender() { @Override public void send() { System.out.println("AAA"); } }; } }
public class OuterClass4 { public static void main(String[] args) { Sender sender = new Sender() { @Override public void send() { System.out.println("aaa"); } }; sender.send(); } }
内容总结
以上是互联网集市为您收集整理的Java中的内部类全部内容,希望文章能够帮你解决Java中的内部类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。