Loading... ##概述 1,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。 2,与之对应,包含内部类的类被称为外部类 3,内部类的信息获取需要借助外部类去访问, 4,内部类隐藏在外部类内,更好的实现了信息隐藏 5,内部类的分类: 成员内部类 静态内部类 方法内部类 匿名内部类  ###成员内部类 内部类 需要借由外部类信息才能实例化! 获取内部类实例对象: 1. new 外部类.new 内部类 Person.Heart myHeart=new Peron().new Heart(); 2. 外部类对象.new 内部类 外部类对象Person lili´new Person(); Person.Heart myHeart; myHeart=lili.new Heart(); 3. 在外部类中定义一个方法实例内部类。调用这个方法 -内部类可以直接访问外部类的成员(变量和方法)   ###静态内部类 1.静态内部类中,只能直接访问外部类的静态成员,如果要调用非静态成员,可以通过对象实例 2.静态内部类对象实例时,可以不依赖于外部类对象 3.可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员 4.党内部类属性与外部类属性同名时,默认直接调用内部类中的成员 如果需要访问外部类中的静态属性,则可以通过 外部类.属性的方式 如果要访问外部类中的非静态属性,则可以通过new 外部类().属性 的方式  ###方法内部类 定义在方法内部,作用范围也在方法内。 和方法内部成员使用规则一样,class前面不可以添加public,private,protected,static。 类中不能包含静态成员。 类中可以包含final,abstract(一般不推荐)修饰的成员  ###匿名内部类(上) 匿名内部类: 针对某个类实例只用一次,我们就可以将类的定义与类的创建,放在一起完成来简化程序,以这种方式定义的没有名字的类,就是匿名内部类。可通过此类来简化抽象类和接口实现的操作。 优点:对内存和系统性能损耗小 缺点:不支持重复调用 适用场景: - 只用到类的一个实例 - 类在定义后马上用到 - 给类命名并不会导致代码更容易被理解 写法: ```java public class Test { // 根据传入不同的参数类型,调用不同的方法 public void getRead(Person person){ person.read(); } // 方法3: public static void main(String[] args) { Test test = new Test(); //实例对象的同时完成对象内容的编写 test.getRead(new Person(){ @Override public void read() { System.out.println("女生喜欢看言情小说"); } }); test.getRead(new Person(){ @Override public void read() { System.out.println("男生喜欢看科幻小说"); } }); } } ```  ### 匿名内部类(下) 1.适用场景: (1)只用到类的一个实例 (2)类定义后马上用到 (3)给类命名并不会导致代码更容易被理解 2.匿名内部类没有类型名称、实例对象名称。 3.编译后的文件命名:外部类¥数字。class 4.无法使用private、public、protected、abstract、static修饰 5.无法编写构造方法,可以添加构造代码块。 6.不能出现静态成员 7.匿名内部类可以实现接口也可以继承父类,但是不可兼得。 <hr class="content-copyright" style="margin-top:50px" /><blockquote class="content-copyright" style="font-style:normal"><p class="content-copyright">版权属于:Feihong</p><p class="content-copyright">本文链接:<a class="content-copyright" href="https://www.feihong.me/archives/59.html">https://www.feihong.me/archives/59.html</a></p><p class="content-copyright">转载时须注明出处及本声明</p></blockquote> 最后修改:2019 年 12 月 31 日 11 : 38 PM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 ×Close 赞赏作者 扫一扫支付 支付宝支付 微信支付