【 java 面向对象】内部类
JAVA 内部 面向对象
2023-09-27 14:26:52 时间
前言
在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。本篇博客将总结内部类的使用。
内部类概述
- 当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类。
- 在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。
- 内部类一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。
- 内部类的名字不能与包含它的外部类类名相同;
内部类的分类
内部类分为:
成员内部类( static 成员内部类和非 static 成员内部类)
局部内部类(方法内,代码块内,构造器内)
成员内部类
一方面,作为外部类的成员:
- 调用外部类的结构。
- 可以被 static 修饰(注意里面只能调用静态方法,静态属性)。
- 可以被4种不同的权限修饰。
另一方面,作为一个类:
- 类内可以定义属性、方法、构造器等。
- 可以被final修饰,表示此类不能被继承。
- 可以被 abstract 修饰。
class People{
String race;
String countries;
//静态成员内部类
static class Man{
String name;
public Man(){
}
public void display(){
System.out.println("3090yyds");
}
}
// 非静态成员内部类
class Women{
String name;
public Women(){
}
public void display(){
System.out.println("化妆");
}
}
}
如何实例化成员内部类的对象
package 内部类;
public class Demo {
public static void main(String[] args) {
//创建Man对象(静态的成员内部类)
People.Man m = new People.Man();
m.display();
//创建Women对象(非静态的成员内部类)
People p = new People();
People.Women w = p.new Women();
w.display();
}
}
如何在成员内部类成员中区分调用外部类的对象
package 内部类;
public class Demo {
public static void main(String[] args) {
//创建Women对象(非静态的成员内部类)
People p = new People();
People.Women w = p.new Women();
w.display("a");
}
}
class People{
String name = "niu";
String countries;
public void eat(){
System.out.println("吃饭");
}
// 非静态成员内部类
class Women{
String name = "aniu";
public Women(){
}
public void eat(){
System.out.println("吃蔬菜");
}
public void display(String name){
System.out.println("化妆");
System.out.println(name); //方法的形参
System.out.println(this.name); //内部类的属性
System.out.println(People.this.name); //外部类的属性
this.eat(); //内部类的方法
People.this.eat(); // 外部类的方法
}
}
}
局部内部类
局部内部类可以在方法内,代码块内,构造器内
class Animal{
// 局部内部类
// 构造器内
Animal(){
class Dog{
}
}
// 代码块内
{
class Cat{
}
}
// 方法内
public void method(){
class Bird{
}
}
}
开发中局部内部类的使用
我们在开发中局部内部类使用较多,比如,我们需要一个方法返回实现了某个接口的类的对象,此时方法内自然就需要一个内部类实现接口!
例:
// 返回一个实现了Comparable接口的类的对象
public Comparable getComparable(){
// 创建一个实现了Comparable接口的类 ---局部内部类
class MyComparable implements Comparable{
@Override
public int compareTo(Object o) {
return 0;
}
}
return new MyComparable(); // 非匿名内部类的匿名对象
}
或者是这样
// 返回一个实现了Comparable接口的类的对象
public Comparable getComparable(){
return new Comparable() {
@Override
public int compareTo(Object o) {
return 0;
}
}; // 匿名内部类的匿名对象
结语
如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。
🏰系列专栏
👉软磨 css
👉硬泡 javascript
👉flask框架快速入门
相关文章
- JAVA只要掌握内部类,多继承和单继承都不是问题
- Java 历史
- Windows 10 设置 Java 环境变量
- Java基础-内部类-为什么局部和匿名内部类只能访问局部final变量
- Java基础-内部类
- Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字
- java.sql.SQLException: 无法转换为内部表示
- JAVA 内部类 (一)
- java匿名内部类new(){}
- 【Java 问题 & 解决方法 · SpringBoot & Jackson】Enum类型 转JSON无法获取内部属性
- 【Python(3),马士兵Java视频下载
- 真的醉了!java多线程匿名内部类
- Java内部类的使用小结
- java 使用内部类的理由
- Java 从多层嵌套中访问内部类的成员
- java使用javamail读取邮箱(收件箱为例)
- 为什么java内部类访问局部变量必须声明为final?
- 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.6 为克隆使用序列化
- java中常用的String方法
- Java NIO 选择器(Selector)的内部实现(poll epoll)
- day11<Java开发工具&常见对象>
- 强哥说Java--Java内部类(三)
- java代码的几个utils,基本可以直接用
- 关于Java内部类的初始化
- java-基础-内部类
- 使用JAVA SACLA 开发 Spark SQL DataFrame IMF内部课程
- JAVA 内部类、外部类、继承、抽象类、接口实战
- 【java web篇】项目管理构建工具Maven简介以及安装配置
- 前后端分离时代,Java 程序员的变与不变!
- java项目实战——Java打飞机小游戏(附完整源码)
- 大数据必学Java基础(四十六):内部类和面向对象项目实战
- 中南林业科技大学Java实验报告九:内部类和异常类
- Java中锁分类