java基础之认识内部类(未修订)
来源:互联网 发布:杭州淘宝美工培训机构 编辑:程序博客网 时间:2024/06/05 20:53
内部类作用
- 内部类相当于集成了外部类的出去private修饰的所有东西
- 内部类还能实现多继承,如外部类已经继承,如果还想再继承可以建立内部类进行继承
- 内部类,除了外部类能够访问,其他类不能访问
成员内部类
- 成员内部类中不能存在任何static的变量和方法;
- 成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类
public class OuterClass { private String str; public void outerDisplay(){ System.out.println("outerClass..."); } public class InnerClass{ public void innerDisplay(){ //使用外围内的属性 str = "chenssy..."; System.out.println(str); //使用外围内的方法 outerDisplay(); } } /*推荐使用getxxx()来获取成员内部类,尤其是该内部类的构造函数无参数时 */ public InnerClass getInnerClass(){ return new InnerClass(); } public static void main(String[] args) { OuterClass outer = new OuterClass(); OuterClass.InnerClass inner = outer.getInnerClass(); inner.innerDisplay(); }}--------------------chenssy...outerClass...
局部内部类
有这样一种内部类,它是嵌套在方法和作用于内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。
定义在方法里:
public class Parcel5 { public Destionation destionation(String str){ class PDestionation implements Destionation{ private String label; private PDestionation(String whereTo){ label = whereTo; } public String readLabel(){ return label; } } return new PDestionation(str); } public static void main(String[] args) { Parcel5 parcel5 = new Parcel5(); Destionation d = parcel5.destionation("chenssy"); }}
定义在作用域内:
public class Parcel6 { private void internalTracking(boolean b){ if(b){ class TrackingSlip{ private String id; TrackingSlip(String s) { id = s; } String getSlip(){ return id; } } TrackingSlip ts = new TrackingSlip("chenssy"); String string = ts.getSlip(); } } public void track(){ internalTracking(true); } public static void main(String[] args) { Parcel6 parcel6 = new Parcel6(); parcel6.track(); }}
匿名内部类
如
button2.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e) { System.out.println("你按了按钮二"); } });
再如:
public class OuterClass { public InnerClass getInnerClass(final int num,String str2){ return new InnerClass(){ int number = num + 3; public int getNumber(){ return number; } }; /* 注意:分号不能省 */ } public static void main(String[] args) { OuterClass out = new OuterClass(); InnerClass inner = out.getInnerClass(2, "chenssy"); System.out.println(inner.getNumber()); }}interface InnerClass { int getNumber();}----------------Output:
是不是都不知道那个是匿名内部类了,为啥叫匿名内部类,因为他都没有名字。。。
再看看特点:
- 匿名内部类是没有访问修饰符的。
- new 匿名内部类,这个类首先是要存在的。如果我们将那个InnerClass接口注释掉,就会出现编译出错。
- 注意getInnerClass()方法的形参,第一个形参是用final修饰的,而第二个却没有。同时我们也发现第二个形参在匿名内部类中没有使用过,所以当所在方法的形参需要被匿名内部类使用,那么这个形参就必须为final。
- 匿名内部类是没有构造方法的。因为它连名字都没有何来构造方法。
静态内部类
关键字static中提到Static可以修饰成员变量、方法、代码块,其他它还可以修饰内部类,使用static修饰的内部类我们称之为静态内部类
静态内部类与非静态内部类之间存在一个最大的区别:
我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态内部类却没有
特点:
- 它的创建是不需要依赖于外围类的。
- 它不能使用任何外围类的非static成员变量和方法。
public class OuterClass { private String sex; public static String name = "chenssy"; /** *静态内部类 */ static class InnerClass1{ /* 在静态内部类中可以存在静态成员 */ public static String _name1 = "chenssy_static"; public void display(){ /* * 静态内部类只能访问外围类的静态成员变量和方法 * 不能访问外围类的非静态成员变量和方法 */ System.out.println("OutClass name :" + name); } } /** * 非静态内部类 */ class InnerClass2{ /* 非静态内部类中不能存在静态成员 */ public String _name2 = "chenssy_inner"; /* 非静态内部类中可以调用外围类的任何成员,不管是静态的还是非静态的 */ public void display(){ System.out.println("OuterClass name:" + name); } } /** * @desc 外围类方法 * @author chenssy * @data 2013-10-25 * @return void */ public void display(){ /* 外围类访问静态内部类:内部类. */ System.out.println(InnerClass1._name1); /* 静态内部类 可以直接创建实例不需要依赖于外围类 */ new InnerClass1().display(); /* 非静态内部的创建需要依赖于外围类 */ OuterClass.InnerClass2 inner2 = new OuterClass().new InnerClass2(); /* 方位非静态内部类的成员需要使用非静态内部类的实例 */ System.out.println(inner2._name2); inner2.display(); } public static void main(String[] args) { OuterClass outer = new OuterClass(); outer.display(); }}----------------Output:chenssy_staticOutClass name :chenssychenssy_innerOuterClass name:chenssy
阅读全文
0 0
- java基础之认识内部类(未修订)
- java基础之抽象类的意义(未修订)
- java基础之匿名内部类
- Java基础之接口、内部类
- java基础之----匿名内部类
- java基础 内部类
- java基础--内部类
- java基础<内部类>
- java基础--内部类
- Java基础 内部类
- java基础:内部类
- Java基础----内部类
- java基础--内部类
- Java基础--内部类
- java基础--内部类
- java基础-内部类
- java基础-内部类
- Java 基础----内部类
- 设计模式(单例设计模式)
- 面向对象知识点小记(2)
- 安装laravel-admin产生不了app\Admin文件问题
- final finalize 关键字
- Mysql总结2-mysql基础(DQL,DML,DDL,DCL)
- java基础之认识内部类(未修订)
- 15.14
- 自然语言处理快速入门
- Linux命令集合二
- 20171030
- python学习(3)anaconda的介绍 以及 Spyder 的 IPython 的%魔术命令
- HTML基础 超链接基础2
- 使用sysbench对Mysql进行压力测试查询性能
- JavaWeb学习心得之JDBC处理MySQL大数据