JAVA_内部类
Posted mikeshc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA_内部类相关的知识,希望对你有一定的参考价值。
内部类的种类:
成员内部类:
成员内部类也是最普通的内部类,它是外部类的一个成员,所以他是可以无限制的访问外围类的所有成员属性和方法,尽管是private的,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。
public class Inner {
public static void main(String[] args) {
Outter.Inter in = new Outter().new Inter();
in.print();
}
}
class Outter{
int age = 10;
class Inter{
int age = 30;
void print(){
System.out.println("访问外部类的变量"+Outter.this.age);
}
}
}
方法内部类:
方法内部类定义在外部类的方法中,局部内部类和成员内部类基本一致,只是它们的作用域不同,
方法内部类只能在该方法中被使用,出了该方法就会失效。 对于这个类的使用主要是应用与解决比较复杂的问题,
想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类。public class func {
void inner(){
//作用域只能这个方法
int age1 = 10;
class Test{
int age = 20 ;
void print(){
System.out.println("年龄"+age1);
System.out.println("年龄"+this.age);
}
}
new Test().print();
}
public static void main(String[] args) {
new func().inner();
}
}
匿名内部类
匿名内部类其实就是一个没有名字的方法内部类,所以它符合方法内部类的所有约束,初次之外,还有一些地方需要注意:
- 匿名内部类是没有访问修饰符的。
- 匿名内部类必须继承一个抽象类或者实现一个接口
- 匿名内部类中不能存在任何静态成员或方法
- 匿名内部类是没有构造方法的,因为它没有类名
public class OutClass {
public static void test01(AA a){
a.aa();
}
public static void main(String[] args) {
test01(new AA() {
@Override
public void aa() {
System.out.println("aaaaaa");
}
});
}
}
interface AA{
void aa();
}
静态内部类
关键字static可以修饰成员变量、方法、代码块,其实它还可以修饰内部类,使用static修饰的内部类我们称之为静态内部类。静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态内部类却没有。没有这个引用就意味着:
静态内部类的创建是不需要依赖于外围类,可以直接创建
静态内部类不可以使用任何外围类的非static成员变量和方法,而内部类则都可以
public class Inner {
public static void main(String[] args) {
Outter2.Inter2 aa = new Outter2.Inter2();
aa.print();
}
}
class Outter2 {
static int age= 10;
static class Inter2 {
int age = 20;
void print() {
int age = 30;
System.out.println("访问外部类的变量" +Outter2.age);
System.out.println("访问内部类的变量"+this.age);
System.out.println("访问局部部类的变量"+age);
}
}
}
以上是关于JAVA_内部类的主要内容,如果未能解决你的问题,请参考以下文章
13_Java面向对象_第13天(staticfinal匿名对象内部类包修饰符代码块)_讲义