Java:内部类-创新互联

目录

员工经过长期磨合与沉淀,具备了协作精神,得以通过团队的力量开发出优质的产品。创新互联公司坚持“专注、创新、易用”的产品理念,因为“专注所以专业、创新互联网站所以易用所以简单”。公司专注于为企业提供成都网站建设、成都做网站、微信公众号开发、电商网站开发,小程序开发,软件定制网站建设等一站式互联网企业服务。

内部类

1.简述

2.内部类相较于外部类的优势

3.分类

     局部内部类

     1.简述 2.特点 3.优势 4.例子

     匿名内部类*

     1.简述 2.特点 3.优势

     成员内部类

     1.简述 2.特点 3.优势

     静态内部类

     1.简述 2.优势

     额外注意点:


内部类 1.简述
  • 内部类,方法,属性,代码块,构造器是Java类的五大成员,搞清楚内部类将会对面向对象的编程思想有进一步的理解和感悟。
2.内部类相较于外部类的优势
  • 内部类可以直接调用类中封装的属性和方法;
  • 内部类不为同一包下的外部类所见,具有良好的封装性;
  • 不同的内部类各有其自己的优势,详见下文对四种内部类的详解;
3.分类
  • 内部类可分为:局部内部类,匿名内部类,成员内部类和静态内部类。

局部内部类 1.简述
  • 局部内部类顾名思义就是作用域只为局部的内部类,即定义在外部类的代码块或者方法中的类。
2.特点
  • 不能用除了"final"以外的任何修饰符,因为它的地位相当于一个局部变量,而局部变量是不能加除了"final"以外的任何修饰符的;
3.优势
  • 局部内部类的创建和调用只能在其局部的作用域中,所以其具有良好的封装性;
4.例子
public class local_inner {
    public static void main(String[] args) {
        local_inner localInner = new local_inner();
    }
    {
        class AnlocalInner{
            AnlocalInner(){
                System.out.println("AnlocalInner have been created.");
            }
    }
        AnlocalInner anlocalInner = new AnlocalInner();
    }
}
  • 输出结果为"AnlocalInner have been created."

匿名内部类* 1.简述
  • 匿名内部类顾名思义是运行类型无法直接看到的内部类(但可以通过getClass()方法得到),是四个内部类中最重要的一个也是最难理解的一个。
2.特点
  • 运行类型无法直接看到,需要我们通过getClass()方法查看,以以下代码为例子:
public class Anonymous_inner{
    public static void main(String[] args) {
        System.out.println(new father(){}.getClass());
    }
}
class father{
}

输出结果:

class Anonymous_inner$1

可见该类的实际运行类型并不是father而是以外部类名+"$"+编号命名,且运行类型只会在内存中出现一次,一旦其地址被father类所引用,下一个产生的匿名外部类编号就会+1;

  • 不能用除了"final"以外的任何修饰符,因为它的地位相当于一个局部变量;
3.优势
  • 匿名内部类的创建和调用也只能在其局部的作用域中,所以其具有良好的封装性;
  • 匿名内部类既是一个类的定义同时本身也是一个对象,可以调用匿名内部类的方法,且匿名内部作用在局部,内存用完就会释放,当我们需要用到某个接口或者某个类的一个方法时,匿名内部类是不二之选。
  • 可以当作实参直接传递,简洁高效,见以下实例:
public class Anonymous_inner{
    public static void main(String[] args) {
        id(new father() {
        });
    }

    static void id(father father){
        System.out.println(father.getClass());
    }
}
interface father{
}

输出结果:

class Anonymous_inner$1

成员内部类 1.简述
  • 作用域为整个类区域,地位等同于类的方法和属性,相当于类的一个成员而得名。
2.特点
  • 典型的内部类;
  • 可以添加任何修饰符,因为他的地位就是一个成员;
3.优势
  • 可以为外部所使用,如下示例:
public class member_inner {

    public static void main(String[] args) {
        //方法一
        member_inner memberInner = new member_inner();
        member_inner_class member_inner_class = memberInner.new member_inner_class();
        //方法二
        member_inner_class member_inner_class1 = new member_inner().new member_inner_class();
        //方法三 使用一个方法来获取
        member_inner_class member_inner_class2 = new member_inner().getInstance();
    }
    class member_inner_class{}

    public  member_inner_class getInstance() {
        return new member_inner_class();
    }
}

静态内部类 1.简述
  • 静态的成员内部类。
2.优势
  • 可以且只可以使用类方法和类属性;
  • 可以不用新建一个外部类来创建静态内部类:
public class member_inner {

    public static void main(String[] args) {
        //方法一
        member_inner_class member_inner_class1 = new member_inner.member_inner_class();
        //方法二
        member_inner_class member_inner_class2 = member_inner.getInstance();
    }
    static class member_inner_class{}

    public static member_inner_class getInstance() {
        return new member_inner_class();
    }
}

额外注意点:
  • 当内部类和外部类的属性重名时,默认遵循就近原则,
  • 除静态内部类外的内部类若要调用外部属性则要通过: 外部类名.this.属性名来调用      这里的 外部类名.this 的本质就是指向当前这个正在执行操作的外部类对象。
  • 静态内部类若要调用外部属性则要通过: 外部类名.属性名来调用 (静态内部类是静态的,无法使用"this"方法,同时静态内部类调用额只能是外部类的静态属性或者静态方法,也无需使用this指向。)

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文标题:Java:内部类-创新互联
网站路径:http://ybzwz.com/article/ipdce.html