【Java概念】内部类(12)
来源:互联网 发布:阿菲金软件价格 编辑:程序博客网 时间:2024/06/05 20:27
package cn.hncu.program.innerClass;/** * 项目名:内部类 :InnerClass * 内部接口:InnerInterface * 时间 :2017-9-13 下午8:36:33 *//* *【如何定义内部类?】: *1.内部类定义在外部类普通成员方法的位置。 *2.内部类和普通类定义是一样的,只是内部类是定义在类中的类。 * *3.非静态内部类无法定义static的变量和方法;静态内部类可以定义static的变量和方法。 *//* * 【内部类的四种级别】: * 类级:成员式,有static修饰 * 对象级:成员式,普通,无static修饰 * 本地内部类:局部式,在方法内部定义 * 匿名内部类:局部式,在方法内部定义 * * 【局部内部类只能访问外部方法中的final变量 】: * 原因: * 虽然局部内部类在方法的内部,但实际编译的时候,内部类编译成,Outer.Inner, * 这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或 * 参数只是方法的局部变量,这些变量或参数的作用域只在这个方法内部有效。 * 因为编译的时候内部类和方法在同一级别上,所以方法中的变量或参数只有final,内部类 * 才可以引用。----常量池。 */class Outer{/*外部类*/ private int size = 8;//外部类成员 private int count = 10; public void doSth(){ /* * 【外部类访问内部类】: */ System.out.println(new Inner2().size); new Inner2().doSth(); System.out.println(new Inner3().size); } public class Inner{/*内部类*/ private int size = 6;//内部类成员 public void doSth(){ System.out.println("inner..."); } } public class Inner2{ /*private static count = 10;//非静态内部类无法定义静态成员:变量和方法 public static void aa(){ } */ private int size = 7;//内部类成员 /* * 【内部类与外部类,内部类与内部类之间的访问形式】: * 1.非静态内部类调用,访问外部类的变量,以及内部类成员变量。 * 2.内部类访问外部类的成员。 */ public void doSth(){ //首先访问当前内部类Inner2的成员变量: System.out.println("Inner2>size = "+size); System.out.println("Inner2>this.size = "+this.size); //访问同级别内部类Inner的成员变量: System.out.println("Inner>size = "+new Inner().size); //访问外部类Outer的成员变量: System.out.println("Outer>size = "+Outer.this.size); //【非静态内部类访问静态内部类成员】: System.out.println("Inner3>size = "+new Inner3().size); } } /* * 【静态内部类】: */ public static class Inner3{ private int size = 10; private int count =1 ;//静态内部类可以定义static成员:变量和方法 public void aa(){ } public void doSth(){ //1.静态内部类访问外部类成员变量: System.out.println(new Outer().size); //2.静态内部类访问非静态内部类成员: System.out.println(new Outer().new Inner2().size); //3.静态内部类访问本类成员; System.out.println(size); } } /* 测试如何使用内部类: * * 【如何使用内部类? 】: * 1.可以把非静态内部类理解成外部类的一个非静态成员,就像一个非静态方法一样。 * 2.创建外部类实例。 * 3.调用非静态内部类的构造方法: 要通过 outer.new ---外部类对象.new内部类 。 */ public void t1(){ //(1)创建外部类实例: Outer outer = new Outer(); //(2)调用内部类成员方法: outer.doSth(); } /* * 测试内部类与外部类,内部类与内部类之间如何访问: * * 【内部类、外部类之间如何访问?】: * */ public void t2(){ //1.创建非静态内部类实例。 Outer.Inner2 inner2 = new Outer().new Inner2(); //2.doSth inner2.doSth(); } public void t3(){ //1.创建静态内部类实例。 Inner3 inner3 = new Inner3(); //2.doSth inner3.doSth(); }}/* * 匿名内部类----局部内部类: * cryptonym:匿名 */class Cryptonym{ public Cryptonym() { /* * 【写匿名内部类(接口的实现类)---new 接口 】: */ final int size = 100;//----局部变量,既不是类级,也不是对象级 MyInterface inter = new MyInterface() { @Override public void run() { System.out.println("run....."); //局部内部类只能访问外部类变量的final变量 /外部类方法中的final变量 System.out.println("cryptonym>inter>size = "+size); } }; /* * 【匿名内部类方法非final变量】: * 1.如果一个局部内部类非要去访问外面方法中的非final局部变量,那么可以通过传参实现 */ MyInterface2 inter2 = new MyInterface2() { @Override public void fun(int n) { System.out.println("n = "+n); } }; /* * 【局部内部类(抽象类的实现类):new抽象类】: * */ A a = new A() { public void run() { System.out.println("A...run...."); } public void bb(){ System.out.println("B...bb..."); } }; a.run(); //a.bb();//编译出错:编译时多态:先到A类中及其父类中找bb方法: /* * 【局部内部类(普通类的实现类):】 */ new Thread(){ @Override public void run() { System.out.println("Thread...run..."); } }.start(); }}interface MyInterface{ public abstract void run();}interface MyInterface2{ public abstract void fun(int n);}abstract class A{ public abstract void run();}public class InnerClass{ public static void main(String[] args) { //测试如何使用内部类: new Outer().t1(); //测试内部类、外部类之间如何访问: new Outer().t2(); //测试静态内部类、外部类之间如何访问: new Outer().t3(); //测试如何使用匿名内部类: Cryptonym crypt = new Cryptonym(); }}
阅读全文
0 0
- 【Java概念】内部类(12)
- Java内部类的概念
- JAVA内部类概念简介
- Java内部类的概念
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- java 内部类(成员内部类)
- java 内部类(成员内部类)
- java内部类(局部内部类)
- 内部类 概念
- Java 各种内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java 内部类(分四种:成员内部类、局部内部类、静态内部类和匿名内部类)
- Java基础_内部类:静态内部类、成员内部类、局部内部类、匿名内部类 (转)
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java基础_内部类、静态内部类、成员内部类、局部内部类、匿名内部类 (转)
- Java 内部类详解(成员内部类、静态内部类、局部内部类、匿名内部类)
- 【内部类】内部类的概念及成员内部类
- java笔记12 内部类
- 内部类与匿名内部类的概念与使用————Java基础知识
- Java LinkedList源码
- 互联网中寻找相似实体(lookalike)算法优化方案
- 配置scrapy下载图片
- c语言不定长形参
- 用Scrapy对豆瓣top250进行电影详细信息爬取
- 【Java概念】内部类(12)
- com.qf.util工具类里边的C3P0Util.java
- 四大组件---Activity
- CentOS7安装ActiveMQ
- selenium多页面切换
- Application类的应用
- java连接池实现
- 中科院客座生及个人大学生活总结
- maven快速安装使用