【Java】Java基础——内部类、外部类

一、内部类

1. 定义

内部类(Inner Class)是在一个类的内部定义的类。

2. 内部类的分类

(1) 成员内部类
public class OuterClass {
    // 外部类定义
    public InnerClass getInner(){
    	return new InnerClass();
    }
    // 成员内部类定义
    public class InnerClass {
        // 内部类定义
        
    }
}

// 实例化内部类对象
OuterClass outer = new OuterClass();
// 方法1
OuterClass.InnerClass inner = outer.new InnerClass();
// 方法2
inner = out.new InnerClass();
// 方法3
inner = out.getInner();

(2) 静态内部类
public class OuterClass {
    // 外部类的静态成员
    private static int outerStaticVar = 10;
    
    // 内部静态类: 只能直接访问外部类静态成员,若要访问非静态成员,可通过对象实例
    public static class InnerClass { 
        // 内部类的成员方法
        public void innerMethod() {
            System.out.println("Inner method called");
            
            // 可以访问外部类的静态成员
            System.out.println("Outer static variable: " + outerStaticVar);
            
            // 不能直接访问外部类的非静态成员
            // System.out.println("Outer non-static variable: " + outerNonStaticVar);  // 错误!
        }
    }
}

OuterClass.innerClass inner = new OuterClass.innerClass();

(3) 方法内部类

定义在外部类方法内的内部类。

public class Person{
	public static int age;

	public Object getHeart(){
		class Heart{ // 不能添加public, proteted, private, static
			public final int age = 13;
			public String beat(){
				return age+"岁的心脏在跳动";
			}
		}
		return new Heart().beat();
	}
}

public class Test{
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.getHeart());
    }
    
}
(4) 匿名内部类:
package anonymous;

public abstract class Person {
    private String name;

    public Person(){

    }

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public abstract void read();
}
package anonymous;

public class personTest {
    public void getRead(Person person){
        person.read();
    }
    public static void main(String[] args){
        personTest test = new personTest();
        test.getRead(new Person() {
            @Override
            public void read(){
                System.out.println("男生喜欢科幻书");
            }
        });
        test.getRead(new Person() {
            @Override
            public void read(){
                System.out.println("女生也喜欢科幻书");
            }
        });

    }
}

你可能感兴趣的:(java,java,开发语言)