Java:内部类-创新互联
目录
员工经过长期磨合与沉淀,具备了协作精神,得以通过团队的力量开发出优质的产品。创新互联公司坚持“专注、创新、易用”的产品理念,因为“专注所以专业、创新互联网站所以易用所以简单”。公司专注于为企业提供成都网站建设、成都做网站、微信公众号开发、电商网站开发,小程序开发,软件定制网站建设等一站式互联网企业服务。内部类
1.简述
2.内部类相较于外部类的优势
3.分类
局部内部类
1.简述 2.特点 3.优势 4.例子
匿名内部类*
1.简述 2.特点 3.优势
成员内部类
1.简述 2.特点 3.优势
静态内部类
1.简述 2.优势
额外注意点:
内部类 1.简述
- 内部类,方法,属性,代码块,构造器是Java类的五大成员,搞清楚内部类将会对面向对象的编程思想有进一步的理解和感悟。
- 内部类可以直接调用类中封装的属性和方法;
- 内部类不为同一包下的外部类所见,具有良好的封装性;
- 不同的内部类各有其自己的优势,详见下文对四种内部类的详解;
- 内部类可分为:局部内部类,匿名内部类,成员内部类和静态内部类。
局部内部类 1.简述
- 局部内部类顾名思义就是作用域只为局部的内部类,即定义在外部类的代码块或者方法中的类。
- 不能用除了"final"以外的任何修饰符,因为它的地位相当于一个局部变量,而局部变量是不能加除了"final"以外的任何修饰符的;
- 局部内部类的创建和调用只能在其局部的作用域中,所以其具有良好的封装性;
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()方法得到),是四个内部类中最重要的一个也是最难理解的一个。
- 运行类型无法直接看到,需要我们通过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"以外的任何修饰符,因为它的地位相当于一个局部变量;
- 匿名内部类的创建和调用也只能在其局部的作用域中,所以其具有良好的封装性;
- 匿名内部类既是一个类的定义同时本身也是一个对象,可以调用匿名内部类的方法,且匿名内部作用在局部,内存用完就会释放,当我们需要用到某个接口或者某个类的一个方法时,匿名内部类是不二之选。
- 可以当作实参直接传递,简洁高效,见以下实例:
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.简述
- 作用域为整个类区域,地位等同于类的方法和属性,相当于类的一个成员而得名。
- 典型的内部类;
- 可以添加任何修饰符,因为他的地位就是一个成员;
- 可以为外部所使用,如下示例:
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.简述
- 静态的成员内部类。
- 可以且只可以使用类方法和类属性;
- 可以不用新建一个外部类来创建静态内部类:
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://cdiso.cn/article/ipdce.html