黑马程序员——面向对象-内部类
2015-03-03 19:54
357 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
![](https://img-blog.csdn.net/20150303195511199?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdzg1NTM2MTc5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
内部类访问特点:
为什么内部类能直接访问外部类中的成员?
运行结果是:3
内部类在局部位置上只能访问局部中被final修饰的局部变量。
匿名内部类及使用场景示例:
一个要注意的小细节:
内部类访问特点:
class Outer { private static int num = 31; class Inner// 内部类。 { void show() { System.out.println("show run..." + num); } /* * static void function()//如果内部类中定义了静态成员,该内部类也必须是静态的。 { * System.out.println("function run ...."+num); } */ } public void method() { Inner in = new Inner(); in.show(); } } class InnerClassDemo { public static void main(String[] args) { // Outer out = new Outer(); // out.method(); // 直接访问外部类中的内部类中的成员。 // Outer.Inner in = new Outer().new Inner(); // in.show(); // 如果内部类是静态的。 相当于一个外部类 // Outer.Inner in = new Outer.Inner(); // in.show(); // 如果内部类是静态的,成员是静态的。 // Outer.Inner.function(); } }
为什么内部类能直接访问外部类中的成员?
class Outer { int num = 3; class Inner { int num = 4; void show() { int num = 5; System.out.println(Outer.this.num); } } void method() { new Inner().show(); } } class InnerClassDemo { public static void main(String[] args) { new Outer().method(); } }
运行结果是:3
内部类在局部位置上只能访问局部中被final修饰的局部变量。
/* 内部类可以存放在局部位置上。 内部类在局部位置上只能访问局部中被final修饰的局部变量。 */ class Outer { int num = 3; Object method() { final int x = 9; class Inner { public String toString() { return "show ..." + x; } } Object in = new Inner(); return in;// 0x0045 // in.show(); } } class InnerClassDemo3 { public static void main(String[] args) { Outer out = new Outer(); Object obj = out.method(); System.out.println(obj); } }
匿名内部类及使用场景示例:
interface Inter { void show1(); void show2(); } class Outer { /* * class Inner implements Inter { public void show1() { } public void * show2() { * * } } */ public void method() { // Inner in = new Inner(); // in.show1(); // in.show2(); Inter in = new Inter() { public void show1() { } public void show2() { } }; in.show1(); in.show2(); } } /* * 通常的使用场景之一: 当函数参数是接口类型时,而且接口中的方法不超过三个。 可以用匿名内部类作为实际参数进行传递 */ class InnerClassDemo5 { class Inner { } public static void main(String[] args) { System.out.println("Hello World!"); /* * show(new Inter() { public void show1(){} public void show2(){} }); */ // new Inner(); } public void method() { new Inner(); } public static void show(Inter in) { in.show1(); in.show2(); } }
一个要注意的小细节:
class Outer { void method() { Object obj = new Object() { public void show() { System.out.println("show run"); } }; obj.show();// 为什么会挂呢?因为匿名内部类这个子类对象被向上转型为了Object类型。 // 这样就不能在使用子类特有的方法了。 } } class InnerClassDemo6 { public static void main(String[] args) { new Outer().method(); } }
相关文章推荐
- 黑马程序员——第9天——(面向对象)内部类,异常
- 黑马程序员——java面向对象(三)多态、内部类、包
- 黑马程序员——面向对象(多态,内部类、异常、包)
- 黑马程序员---Java基础---面向对象:多态、内部类、异常
- 黑马程序员——Java基础---面向对象(继承、多态、抽象类、接口、内部类)
- 黑马程序员_面向对象(继承、多态、内部类)
- 黑马程序员-day09-面向对象(内部类)
- 黑马程序员———面向对象之包、访问修饰符、内部类
- 黑马程序员 笔记(九)——面向对象(内部类)
- 黑马程序员_java基础2(面向对象、内部类、异常)
- 黑马程序员——学习日志6面向对象(多态,内部类,异常,访问权限)
- 黑马程序员-----面向对象_内部类(学习日记)
- 黑马程序员------毕老师视频笔记第九天------面向对象(内部类)
- 黑马程序员------面向对象(No.7)(内部类、异常概述、异常try-catch、异常声明throws、多异常处理)
- 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类
- 黑马程序员——面向对象09(内部类、异常上)
- 黑马程序员面试题面向对象二(多态,抽象类abstract,接口Interface,内部类,异常Exception,包package,String类,StringBuffer)
- 黑马程序员 Java面向对象(继承,抽象类,接口,多态,内部类)
- 黑马程序员——java第九、十天:面向对象(内部类、异常和包)
- 黑马程序员——面向对象——包-修饰符-内部类