内部类

17 篇文章 0 订阅
8 篇文章 0 订阅

java内部类

总所周知,java内部类可以包括静态内部类,局部内部类,等等。从大的角度来说,一般分为普通内部类和局部内部类。

一般内部类是指直接在内部类中再编写一个类;局部内部类是指在一个类中的方法中编写的类的叫法。

package com.beyondTest1;

public class NestClassTest{

public static void main(String[] args) {
OuterClass.NestClass nc=new OuterClass().new NestClass();
nc.test();
new OuterClass().test1();
// OuterClass ocClass=new OuterClass();
// ocClass.test1();

}
}

class OuterClass {
int a=10;
private int c=20;
public void test(){
System.out.println(“外部的”);
}
class NestClass{
public void test(){
System.out.println(“普通内部类”);
}
}

public void test1(){
class NestClass1{
public void test() {
System.out.println(“局部内部类”);
}
}
}
}
由上可以看出一般内部类和局部内部类的使用区别,一个在作为类的普通成员变量,一个作为类方法内部的成员。

在使用上,普通内部类可以直接调用类内部的任意修饰符修饰的方法或变量,是平级关系;

这里写图片描述

这里写图片描述

可以看出,即使是变量的修饰符是private的,内部类依然可以直接调用并且输出。
内部类的作用是为所属的外部类服务。
一般内部类的修饰符是private,偶尔是static。当修饰符是private时,其他类(非内部类的外部类)要使用这个内部类只能使用特定的方式:
外部类名称.内部类名称 内部类对象名称= new 外部类名称().new 内部类名称();
在外部类的非静态方法中访问内部类:Inner in = new Inner();
在外部类的静态方法中访问内部类:Outer.Inner in = new Outer().new Inner();
在外部其他类中访问内部类:Outer.Inner in = new Outer().new Inner();

当内部类被static修饰后,就只能访问外部类中的static成员,出现访问局限
class Outer {
private int x = 1;
static class Inner {
public void seeOuter() {
System.out.println(x); //error
}
}
}
这是因为static在类创建的时候就被初始化,因而不能够访问非静态的属性;有种说法叫,static不能访问非static,非static既可以访问非static,也可以访问static,这是由它在类中的生命周期决定的。
方法内部类的修饰符
与成员内部类不同,方法内部类更像一个局部变量
可以用于修饰方法内部类的只有final和abstract
这里写图片描述
静态方法内的方法内部类
静态方法是没有this引用的,因此在静态方法内的内部类遭受同样的待遇,即:只能访问外部类的静态成员
这里写图片描述
这里写图片描述

匿名内部类就是内部类的简写格式
定义匿名内部类的前提:内部类必须继承一个类或实现接口
匿名内部类就是一个匿名子类对象
格式:new 父类或者接口(){定义子类的内容}
匿名内部类也就是没有名字的内部类
这里写图片描述
正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写
但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
匿名内部类
如果不使用匿名内部类的话,一般可以使用多态的向上转型来访问。
这里写图片描述
说到这里内部类的意义到底是什么呢,通过对内部类的使用可以看出我们一般在内部类中访问外部类的成员变量和方法,然后在其他类中访问这些属性和方法,因此内部类的意义就是方便我们能够方便地使用这些类中的属性而不用通过再创建实现类,减轻了内存的压力。
搜索了一下内部类的好处,得到的回答是:
1.一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
2.内部类拥有外围类的所有元素的访问权限
3.可是实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用。因为当接口中
最重要的我认为是:可以内部类定义在外部类不可访问的属性。这样就在外部类中实现了比外部类private还要小的访问权限。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值