内部类和匿名类

目录

一、内部类

1.数据访问

2.静态内部类 

二、内部类和外部类区别

1.访问修饰符:

2.static修饰:

3.使用:

三、匿名类

 PS:小练习


一、内部类

内部类是指将一个类定义在另一个里面。

内部类分为static内部类和普通内部类。

public class A{
      class B{//内部类

        }
}

这个内编译后会产生两个.class文件,分别是A.class、A$B.class。

一个类可以有多个内部类,内部类可以实现接口和继承类,内部类可以解决Java单继承问题,因为内部类和外部类可以相互访问。

1.数据访问

外部类和内部类可以相互访问类中的成员,包括私有的 

package structure;

public class A {
    public String name;
    private int age;
    public class B{//内部类
        public String bName;
        private int bAge;
        private void setAge(){
            name="";
            this.bAge=age;
        }
    }
    public class C{
        public String cName;
        private int cAge;
    }
    public void compareAge(){
        B b=new B();
        this.age=b.bAge;
        b.setAge();
        C c=new C();
        c.cAge=10;
    }

    public static void main(String[] args) {

    }
}

 内部类的实例化,内部类依托于外部类,所以内部类的实例化要先实例化外部类,然后再实例化内部类。

package structure;

public class ATest {
    public static void main(String[] args) {
        A a=new A();
        A.B b=a.new B();
        b.bName="";
    }
}

2.静态内部类 

package structure;

public class AA {
    static class BB{//static内部类
        
    }
}

静态内部类不能直接访问外部类的成员,可以直接访问外部类的静态成员。 

package structure;

public class AATest {
    public static void main(String[] args) {
        AA aa=new AA();
        AA.BB bb=new AA.BB();
    }
}

所有的访问修饰符都可以修饰内部类 

二、内部类和外部类区别

1.访问修饰符:

外部类只有两种访问权限:public以及package-access

内部类可以有四种访问权限:public、protected、package-access、private

2.static修饰:

外部类不可以使用static修饰。

3.使用:

外部类可以直接被使用,内部类的使用依赖于外部类。

三、匿名类

匿名类是没有明确名称的类。

public static void main(String[] args) {
Pet pet = new Dog();
pet.cry();
//匿名类
Pet p = new Pet() {
@Override
public void cry() {
System.out.println("喵 喵 喵");
}
};
p.cry();
}

 匿名类不能使用修饰符,在方法的内部,对外隐藏。

不能是static,隐式final类。

匿名类没有类名,没有构造方法。

匿名类可以访问类中的成员,不能访问方法中的变量,除非是final型的。

匿名类一般是实现接口、继承抽象类,相当于实现和继承了这个接口/类。

package structure;

public abstract class Pet {
    public abstract void cry();

    //匿名类
    Pet pet = new Pet() {
        @Override
        public void cry() {
            System.out.println("喵喵喵");
        }
    };
    
}

 PS:小练习

package structure;

public class Outer {
    private int index=100;
    void print(){
        Inner i=new Inner();
        i.print();
    }
    class Inner{
        void print(){
            System.out.println(index);
        }
    }
}
class Test{
    public static void main(String[] args) {
        Outer outer=new Outer();
        outer.print();
    }
}

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