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

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

创建一个Computer抽象类:用来在Test类中创建匿名抽象类

package com.zhiyou;public abstract class Computer {        int a  = 1;    /**     * 不能够创建出抽象类的一个对象     */    public abstract void online();    public abstract void watchTv();}

创建一个外部类Outter,在这个外部类Outter的内部在创建一个内部类Inner,在不同的位置定义变量a,我们需要注意的是如何调用不同位置的变量a!

package com.zhiyou;public class Outter {    public void a() {        int a = 3;        System.out.println("外部类a方法--" + this.a);    }    /**     * 嵌套的概念 除了变量和方法之外,我们还可以定义一个类 这个类就是内部类     */    int a = 1;    class Inner {        int a = 2;        public void b() {            int a = 3;            // 不加任何描述的时候根据就近原则调用离他最近的变量            System.out.println("方法内部局部变量--" + a);            // this. 代表调用本类的成员变量或方法            System.out.println("内部类的成员变量--" + this.a);            // Outter.this. 代表调用外部类的成员变量或方法            System.out.println("外部类的成员变量--" + Outter.this.a);            // 调用方法的形式:方法名--()参数列表--分号            // a();        }    }}

创建一个接口AAA用来创建接口的匿名内部类

package com.zhiyou;public interface AAA {}

创建测试类Test,用来输出

package com.zhiyou;/** * 同一个包下面,普通类创建对象时可以直接调用 但是内部类就需要使用import引入 */// import com.zhiyou.Outter.Inner;public class Test {    /**     * 内部类     *      */    public static void main(String[] args) {        // 生成的二进制字节码文件(.class文件)名称是Outter.class        // 那么它里面的内部类Inner生成的文件名称是Outter$Inner.class        Outter outter = new Outter();        // System.out.println(outter.a);        // outter.a();        /*         * 讲继承的时候说过:没有父类就没有子类 对于内部类也一样:没有外部类的对象就不能创建一个内部类的对象         *          * 创建内部类对象的方法:通过外部类的对象去创建内部类的对象         */        // 写法1        Outter.Inner inner = outter.new Inner();        // 写法2        // 通过这种方式创建出来的外部类对象没有引用,是不能使用里面的变量和方法的        // 匿名:new Outter().new Inner();创建出来了一个外部类的对象,但是他没有引用,没用名字        Outter.Inner inner1 = new Outter().new Inner();        System.out.println(inner.a);        inner.b();        /**         * 不能够创建出抽象类的一个对象 匿名的概念         *          * 匿名内部类 这下面其实是有一个类的存在的,但是我们看不见类的任何影子 在编译后的目录中多出来一个 Test$1.class         *          * 相当于:创建出来了一个匿名内部类继承了抽象类Computer并实现了他的抽象方法 创建出了一个抽象类的子类的对象         */        Computer computer = new Computer() {            public void watchTv() {                System.out.println("匿名内部类中的方法  看电视");            }            public void online() {                System.out.println("匿名内部类中的方法  上网");            }        };        System.out.println("抽象类中的变量  a" + computer.a);        computer.watchTv();        computer.online();        /*         * 匿名内部类的创建形式         *          * 不是new+构造方法         *          * new--抽象类或者接口名--()--{}实现抽象方法的地方--分号         * 接口是没有构造方法的的,抽象类有         */        AAA a = new AAA() {        };    }}

 

 

转载于:https://www.cnblogs.com/zhaiyaohua/p/5800096.html

你可能感兴趣的文章
group by 与 order by 一起使用的时候
查看>>
HTML+CSS
查看>>
链接服务器创建
查看>>
用Vue的方式实现复选框
查看>>
mac下安装xampp、及其之上的组件安装
查看>>
C++内存对齐总结
查看>>
Web设计的速查卡(转)
查看>>
数据结构之哈夫曼树
查看>>
hdu1038
查看>>
CentOS 6.4下Zabbix的安装配置
查看>>
前端开发注意的问题 ,浏览器兼容性
查看>>
centos和redhat下 uwsgi配置
查看>>
Markdown 学习笔记
查看>>
vue-element-admin 多层路由问题
查看>>
Css问题 margin float 文档流 背景图底部充满
查看>>
JS match() 方法 使用
查看>>
关于shopee平台接口(php)对接示例
查看>>
BNU OJ 51000 BQG's Random String
查看>>
PAT (Advanced Level) 1044. Shopping in Mars (25)
查看>>
hdu 1531 King
查看>>