博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内部类。
阅读量:4327 次
发布时间:2019-06-06

本文共 2099 字,大约阅读时间需要 6 分钟。

内部类:

1、成员内部类。

内用外,随意访问。 外用内,需要内部类对象。

public class Body {    public class Heart{        public void beat(){            System.out.println("heart");        }    }    public void methodBody(){        System.out.println("外部类的方法。");    }}

使用:

1、间接方式:在外部类的方法中,使用内部类,然后main只是调用外部类的方法。

public void methodBody(){        new Heart().beat();        System.out.println("外部类的方法。");    }

main中,调用methodBody的时候使用了内部类。

2、直接方式:外部类.内部类  对象名 =new 外部类(). new 内部类 ()。

public static void main(String[] args) {        Body.Heart heart=new Body().new Heart();        heart.beat();    }

同名变量的访问:

public class Outer {    int num=10;  //外部类的成员变量    public class Inner{        int num=20;  //内部类的成员变量        public void InnerMethod(){            int num=30; //方法的局部变量。            System.out.println(num); //局部变量,就近            System.out.println(this.num); //内部类的成员变量。            System.out.println(Outer.this.num); //外部类的成员变量        }    }}

2、局部内部类:

如果一个类是定义在一个方法内部的,那么这就是一个局部内部类。

只有所属方法能使用它。

不用写访问修饰符。

public class Outer {    public void method(){        class Inner{            int num=10;            public void InnerMethod(){                System.out.println(num);            }        }        Inner inner=new Inner();        inner.InnerMethod();    }}

 局部内部类的final问题:

局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是  final;

所以下面num变量是 final的。

public class Outer {    public void method(){        int num=10;        class Inner{            public void InnerMethod(){                System.out.println(num);            }        }    }}

原因:

1、new出来的对象(Inner的对象)在堆内存中

2、局部变量是跟着方法的,在栈内存中。

3、方法运行结束后,局部变量会立刻消失,而new 出来的对象会持续存在,知道垃圾回收。

匿名内部类:

如果接口的实现类(或是父类的子类),只需要使用一次,

那么可以省略该类的定义,而使用【匿名内部类】

匿名内部类的定义格式:

接口名称 对象名 =new 接口名称(){

     覆盖重写所有抽象方法。

}

接口:

public interface MyInterface {   public void method();    }

使用:

public static void main(String[] args) {      MyInterface obj=new MyInterface() {          @Override          public void method() {              System.out.println("匿名内部类实现了方法。");          }      };      obj.method();    }

匿名内部类是省略了【实现类/子类名称】,匿名对象是省略了【对象名称】。

 

类作为成员变量类型。

接口作为成员变量类型。

 

转载于:https://www.cnblogs.com/zhangyuhao/p/10702871.html

你可能感兴趣的文章
数据库--查询器
查看>>
querySelector与getElementBy等的区别
查看>>
python 字符串
查看>>
C语言--第0次作业
查看>>
POJ1200(hash)
查看>>
有参装饰器实现登录用户文件验证和验证失败锁定
查看>>
2018-02-27 "Literate Programming"一书摘记之一
查看>>
L2-003. 月饼
查看>>
jsp html5 video实现在线视频播放源码,支持IE6,7,8,10,11,谷歌,火狐等浏览器
查看>>
codeforces 8VC Venture Cup 2016 - Elimination Round C. Lieges of Legendre
查看>>
Eclipse断点调试(上)
查看>>
Spring的aop操作
查看>>
平差方法
查看>>
关于有序guid 的使用
查看>>
arcgis 画图工具
查看>>
[Leetcode]leetcode1-10题随记
查看>>
HDU 4162 Shape Number
查看>>
HDU 5211 Mutiple 水题
查看>>
linux中ctrl+z、ctrl+d和ctrl+c的区别
查看>>
mysql数据库的简单操作
查看>>