当前位置: 首页 > news >正文

内部类和匿名类

目录

一、内部类

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() {@Overridepublic 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();}
}

http://www.lryc.cn/news/143577.html

相关文章:

  • RISC-V 中国峰会 | OpenMPL引人注目,RISC-V Summit China 2023圆满落幕
  • 时空数据挖掘精选23篇论文解析【AAAI 2023】
  • MySQL 存储过程和函数
  • ClickHouse 使用
  • 通过SSH协议连接远程服务器(Linux)
  • IPC之System V vs POSIX
  • 视频汇聚/视频云存储/视频监控管理平台EasyCVR安全检查的相关问题及解决方法
  • 分布式定时任务
  • 国标GB28181视频平台EasyGBS视频监控平台无法播放,抓包返回ICMP排查过程
  • 计算机毕设 基于深度学习的图像超分辨率重建 - opencv python cnn
  • 基于Java+SpringBoot+Vue前后端分离科研工作量管理系统设计和实现
  • Java复习-17-Object类
  • 数据结构--树4.2.4(树、森林即二叉树的相互转换(仅供参考))
  • MyBatis-Plus 总结
  • 【CSS】轮播图案例开发 ( 基本设置 | 子绝父相 | 浏览器水平居中 | 圆角设置 | 绝对定位居中设置 )
  • leetcode做题笔记111. 二叉树的最小深度
  • ubuntu安装Google Chrome 浏览器和ChromeDriver
  • 猫头虎博主赠书一期:《Kubernetes原生微服务开发》
  • QtC++ 设计模式(四)——策略模式
  • LVS集群和分布式概念
  • javafx应用程序线程异常Exception in thread “JavaFx Application Thread“
  • 大漠插件7.2336
  • 5年测试,面试结束后被HR发朋友圈怼了..(心塞)
  • 基于相空间重构的混沌背景下微弱信号检测算法matlab仿真,对比SVM,PSO-SVM以及GA-PSO-SVM
  • 开发者必备:推荐将闲置iPad Pro打造为编程工具,使用VS Code编写代码
  • c++,标准库std中全局函数 _Destroy_in_place(...)的分析
  • java:Tomcat
  • US-P2F-R-C双线圈插头式比例阀放大器
  • clickhouse一次异常排查记录
  • Python 数据可视化:玩转 Matplotlib 的散点图、线形图、饼图和热力图