一般情况下,类和类之间时相互独立的,内部类的意思是打破这种独立,让一个类成为另外一个类的内部信息,和成员变量、成员方法同等级别。
成员内部类
就是将内部类当成外部类的成员变量对待。
/**
* @author Pickle
* @version V1.0
* @date 2024/3/7 11:58
*/
public class OuterClass {
//成员变量
private String outerName = "outer Class";
//成员方法
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 = "inner Class";
}
}
public static void main(String[] args) {
final OuterClass outerclass = new OuterClass();
outerclass.display();
//final InnerClass innerClass = new InnerClass(); 这种方法会报错,因为InnerClass依赖于外部类
OuterClass.InnerClass innerClass = outerclass.new InnerClass();
innerClass.display();
}
}
局部内部类
/**
* @author Pickle
* @version V1.0
* @date 2024/3/7 11:58
*/
public class OuterClass {
//成员变量
private String outerName = "outer Class";
//成员方法
public void display(){
//局部内部类
class InnerClass{
private String innerName = "inner Class";
public void display(){
System.out.println("InnerClass display");
System.out.println(innerName);
}
}
InnerClass innerClass = new InnerClass();
innerClass.display();
}
public static void main(String[] args) {
final OuterClass outerClass = new OuterClass();
outerClass.display();
}
}
静态内部类的构造不需要依赖于外部类
/**
* @author Pickle
* @version V1.0
* @date 2024/3/7 11:58
*/
public class OuterClass {
//成员变量
private String outerName = "outer Class";
//成员方法
public void display(){
System.out.println(outerName);
}
static class InnerClass{
private String innerName = "inner class";
public void display(){
System.out.println(innerName);
}
}
public static void main(String[] args) {
final InnerClass innerClass = new InnerClass();
innerClass.display();
}
}
匿名内部类
对于一个接口不用单独实现,在用到这个接口的地方直接自定义实现方法,灵活使用。
/**
* @author Pickle
* @version V1.0
* @date 2024/3/7 14:43
*/
interface Animal {
void eat();
}
public class Demo {
public void function(Animal a){
a.eat();
}
public static void main(String[] args) {
final Demo demo = new Demo();
demo.function(new Animal() {
@Override
public void eat() {
System.out.println("eat");
}
});
}
}
使用Lambda表达式简化匿名内部类
/**
* @author Pickle
* @version V1.0
* @date 2024/3/7 14:43
*/
interface Animal {
void eat();
}
public class Demo {
public void function(Animal a){
a.eat();
}
public static void main(String[] args) {
final Demo demo = new Demo();
demo.function(()->{
System.out.println("eat");
});
}
}
标签:InnerClass,String,void,public,println,display,内部
From: https://www.cnblogs.com/poteitoutou/p/18058899