内部类和匿名类

内部类和匿名类

内部类

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

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

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

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

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

数据访问

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

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) {
}
}

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

import com.itlaobing.demo.A.B; //导包
public class ATest {
public static void main(String[] args) {
A a = new A();
B b = a.new B();//实例化内部类 B b = new A().new B();
b.bName = "";
}
}

静态内部类

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

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

import com.itlaobing.demo.AA.BB;//导包
public class AATest {
public static void main(String[] args) {
AA a = new AA();
BB b = new BB();//实例化内部类
}
}

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

内部类和外部类区别?

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

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

static 修饰: 外部类不可以使用 static 修饰类,内部类可以

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

匿名类

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

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 的。

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

public abstract class Pet {
public abstract void cry();
}
//匿名类
Pet p = new Pet() {
@Override
public void cry() {
System.out.println("喵 喵 喵");
}
};
//等同于
public class 类名 extends Pet{
@Override
public void cry() {
System.out.println("喵 喵 喵");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
局部内部类和匿名内部类Java中的两种特殊类型的内部类。 局部内部类是定义在方法或者代码块内部的类。它的作用域被限定在所属的方法或代码块内部,不能在外部访问。局部内部类可以访问所属方法或代码块的局部变量,但是这些变量必须声明为final或者事实上的final(在Java 8之后,可以省略final关键字,但是不能对这些变量进行修改)。局部内部类的定义形式如下: ```java public class OuterClass { public void someMethod() { final int localVar = 10; class LocalInnerClass { public void innerMethod() { System.out.println(localVar); } } LocalInnerClass inner = new LocalInnerClass(); inner.innerMethod(); } } ``` 匿名内部类是没有名字的内部类,它直接继承了一个父类或者实现了一个接口。通常用于创建只使用一次的简单类。匿名内部类没有构造方法,因此可以直接通过实例化后的对象进行方法调用。匿名内部类的定义形式如下: ```java public class OuterClass { public void someMethod() { Thread thread = new Thread(new Runnable() { public void run() { System.out.println("Thread is running"); } }); thread.start(); } } ``` 在上述代码中,我们使用匿名内部类实现了Runnable接口,并在Thread类的构造方法中传入了该匿名内部类的实例。 总结一下,局部内部类是定义在方法或代码块内部的类,它的作用域被限定在所属的方法或代码块内部;而匿名内部类是没有名字的内部类,通常用于创建只使用一次的简单类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值