一 : 内部类
一般情况下,类和类之间是互相独立的,内部类的意思是打破这种独立,让一个类成为另外一个类的内部成员,和成员变量、成员方法同等级别。
Q : 为什么要使用内部类?
A : 采用内部类这种技术,可以隐藏细节和内部结构,封装性更好,让程序的结构更加合理。
二 : 非静态内部类
package Test;
public class OuterClass {
//成员变量
private String outerName = "outerName";
//成员方法
public void display(){
System.out.println("OuterClass display");
System.out.println(outerName);
}
//内部类
public class InnerClass{
private String innerName;
public void display(){
System.out.println("InnerClass display");
System.out.println(innerName);
}
public InnerClass() {
innerName = "innerName";
}
}
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
outerClass.display();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.display();
}
}
非静态内部类的使用就是将内部类当作外部类的一个成员变量/成员方法来使用,所以必须依赖于外部类的对象才能调用,用法和成员变量/成员方法是一致的。
基本的内部类还可以在一个方法体中定义。
package Test;
public class OuterClass2 {
//成员变量
private String outerName;
//成员方法
public void display(){
class InnerClass{
public void print(){
System.out.println("method inner class");
}
}
InnerClass innerClass = new InnerClass();
innerClass.print();
}
public static void main(String[] args) {
OuterClass2 outerClass2 = new OuterClass2();
outerClass2.display();
}
}
三 : 静态内部类
静态内部类的构造不需要依赖于外部类对象,类中的所有静态组件都不需要依赖于任何对象,可以直接通过类本身进行构造。
package Test;
public class OuterClass3 {
//成员变量
private String outerName = "outerName";
//成员方法
public void display(){
System.out.println("OuterClass display");
System.out.println(outerName);
}
public static class InnerClass{
private String innerName;
public InnerClass(){
innerName = "inner class";
}
public void display(){
System.out.println("InnerClass display");
System.out.println(innerName);
}
}
public static void main(String[] args) {
OuterClass3 outerClass3 = new OuterClass3();
outerClass3.display();
OuterClass3.InnerClass innerClass = new InnerClass();
innerClass.display();
}
}
四 : 匿名内部类
指的是没有名字的内部类 , 主要应用于接口的实现 .
package Test;
public class Test {
public static void main(String[] args) {
//实现类
MyInterface myInterface = new MyImplent();
myInterface.test();
//匿名内部类
MyInterface myInterface1 = new MyInterface() {
@Override
public void test() {
System.out.println("人中吕布,马中赤兔,方天画戟,专斩义父");
}
};
myInterface1.test();
}
}
使用内部类也可以实现接口 :
package Test;
//使用内部类实现接口
public class Test1 {
public class MyImplement implements MyInterface{
@Override
public void test() {
System.out.println("test");
}
}
public static void main(String[] args) {
Test1 test1 = new Test1();
MyInterface myInterface = test1.new MyImplement();
myInterface.test();
}
}
本文到此结束 !