内部类其实就是在一个类的内部再定义一个类。例如A类中定义一个B类,那么B类对A类来说就是一个内部类,而A类对B类来说就是一个外部类。
主要分为以下几个类:
注意:内部类有区别于父子类继承关系
内部类对象的创建依赖于外部类对象
内部类对象持有指向外部类对象的引用
package Demo02;
//外部类
public class Outside {
private int LuckyNumber=6;
public void say(){
System.out.println("I‘m an Outer!");
}
//内部类
public class Inside{
public void hey(){
System.out.println("I‘m an Inner!");
}
//内部类可以直接访问外部类的一些方法或者变量
//静态内部类不能访问外部类的属性方法
public void getLuckyNumber(){
System.out.println("Hey! my lucky number is "+LuckyNumber);
say();
}
}
}
package Demo02;
//测试用类
public class Test {
public static void main(String[] args) {
Outside outside = new Outside(); //创建一个指向Outside对象的引用变量outside,类型为Outside
Outside.Inside inside = outside.new Inside(); //利用外部类来引用其中的内部类,并创建一个指向被外部类指向的内部对象的一个引用变量inside,类型为内部类Inside
outside.say(); //用引用变量outside指向外部类Outside中的方法进行调用。
inside.hey(); //用内部类的引用变量inside指向内部类Inside中的方法进行调用
inside.getLuckyNumber(); //利用内部类的方法获取外部类的变量和方法,连私有变量也可以获取
}
}
/*输出结果:
I‘m an Outer!
I‘m an Inner!
Hey! my lucky number is 6
I‘m an Outer!
*/
代码例子:
package Demo02;
public class Outside {
........
}
class Unname{
public void WithOut(){
System.out.println("我是匿名内部类");
}
}
package Demo02;
public class Test {
public static void main(String[] args) {
new Unname().WithOut();
}
}
//接口也同样适用
//输出结果:我是匿名内部类
原文:https://www.cnblogs.com/starocean/p/14720625.html