Java内部类基本介绍、如何实例化内部类和如何调⽤外部类属性和⽅法⼀、 Java内部类分类:
1.⾮静态成员内部类:
内部类没有使⽤static关键字修饰,并且和外部类的成员变量和⽅法属于同⼀级别,这样的是⾮静态成员内部类(可以使⽤权限修饰符修饰,和final、abstract关键字修饰)。
public class Atest {
private String name ="张三";
//类没有⽤static修饰
class Btest{
public void say(){
System.out.println("我是⾮静态成员内部类");
}
}
}
2.静态成员内部类:
内部类使⽤static关键字修饰,并且和外部类的成员变量和⽅法属于同⼀级别,这样的是静态成员内部类(可以使⽤权限修饰符修饰,和final、abstract关键字修饰)。
public class Atest {
public static String name ="张三";
public String age ="23";
static class Btest{
public void say(){
System.out.println("外部成员变量,name = "+ name);
System.out.println("我是静态成员内部类");
//            不可以调⽤⾮静态
//            System.out.println("外部成员变量,age = " + age);
}
}
}
3.局部内部类:
定义在⼀个类的成员⽅法、代码块、构造器内部的类,这样的类成为局部内部类(不能使⽤权限修饰符修饰局部内部类)。
public class Atest {
public void execute(){
class Dtest{
}
}
}
4.匿名内部类:
匿名内部类是没有类名的类,是特殊的局部内部类。
(匿名内部类需要实现接⼝或是继承⼀个抽象类,此外匿名内部类不能定义构造器,因为是匿名)
局部内部类实现接⼝:
public static String name ="张三";
public String age ="23";
public void execute(){
class MyInterface implements TestInterface{
static修饰的变量@Override
public void play(){
System.out.println(name +"在打篮球");
}
}
}
}
interface TestInterface{
void play();
}
可以简化成匿名内部类:
public class Atest {
public static String name ="张三";
public String age ="23";
public void execute(){
TestInterface myInterface =new TestInterface(){
@Override
public void play(){
System.out.println("这是匿名内部类");
}
};
myInterface.play();
}
}
interface TestInterface{
void play();
}
⼆、内部类如何实例化:
1.实例化⾮静态成员内部类:
public class Atest {
public static String name ="张三";
public String age ="23";
class Btest{
public void say(){
System.out.println("测试⾮静态成员内部类实例化");
}
}
}
//1.实例化外部类
Atest atest =new Atest();
//2.实例化内部类
Atest.Btest btest = w Btest();
btest.say();
}
}
2.实例化静态成员内部类:
public class Atest {
public static String name ="张三";
public String age ="23";
static class Ctest{
public void say(){
System.out.println("测试静态成员内部类实例化");
}
}
}
public class MainTest {
public static void main(String[] args){
/
/静态成员内部类实例化
Atest.Ctest ctest =new Atest.Ctest();
ctest.say();
}
}
三、内部类如何调⽤外部类属性与⽅法:
public class Atest {
public static String name ="张三";
public String age ="23";
class Btest{
public String age ="22";
public void say(String age){
System.out.println("我是输出的形参参数,age = "+ age);
System.out.println("我是输出的Btest类成员变量,age = "+this.age);
System.out.println("我是输出的Atest类成员变量,age = "+ Atest.this.age);
}
}
}
执⾏主⽅法:
Atest atest =new Atest();
Atest.Btest btest = w Btest();        btest.say("18");
}
}
输出结果:
我是输出的形参参数,age = 18
我是输出的Btest类成员变量,age = 22
我是输出的Atest类成员变量,age = 23

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。