首页 > 编程语言 >【Java基础】内部类

【Java基础】内部类

时间:2022-09-26 18:56:11浏览次数:77  
标签:Java 内部 基础 Bird Person String public name

1.内部类

在一个类的内部再定义一个类,内部类和外部类名字不能相同。
可以分为

  • 成员内部类:静态、非静态
  • 局部内部类:方法内、代码块内、构造器内,匿名内部类

2.成员内部类

(1)非静态

① 和普通类差不多,可以在内部定义属性、方法、构造器等结构。
② 可以使用public、protected、缺省、private修饰。
③ 可以用abstract、final修饰。
④ 不能用static修饰内部类中的结构。
image

public class Person {
    String name = "张三";

    public void eat() {
        System.out.println("张三吃东西");
    }

    class Bird {
        String name = "小杜";

        public void fly(String name) {
            System.out.println(name+"起飞");
        }
    }
}

⑤ 使用外部类的结构
成员内部类可以直接使用外部类的所有成员,包括私有数据。

        public void fly(String name) {
            System.out.println(name+"起飞");    //形参
            System.out.println(this.name+"起飞");    //内部类属性
            System.out.println(Person.this.name+"起飞");   //外部类属性
        }

⑥ 使用内部类的结构
Person类中,直接创建对象

Bird bird1 = new Bird();
bird1.fly("3");
//或者
Person.Bird bird2 = new Person.Bird();
bird2.fly("2");

Person 类外

Person person = new Person();
Person.Bird bird3 = person.new Bird();
bird3.fly("3");

(2)static修饰,静态

内部类是静态的,有一个静态属性age。
① 当想要在外部类的静态成员部分使用内部类时,可以考虑内部类声明为静态的。
② 内部类成员想要用static修饰,则内部类也要用static修饰,否则报错。

public class Person {
    String name = "张三";

    public void eat(String name) {

    }

    static class Bird {
        String name = "小杜";

        static int age = 4;

        public void fly(String name) {
            System.out.println(name + "起飞");    //形参
        }
    }
}

③ 调用内部类的静态结构

public static void main(String[] args) {
    System.out.println(Bird.age);
}

3.局部内部类

(1)局部内部类
写在方法或代码块中,先声明后使用,作用域为所在花括号内。

public class Person {
    String name = "张三";

    public void eat(String name) {
        class Bread{
            private int price;
            public void sell(){
                System.out.println("卖面包");
            }
        }
    }
}

特点

  • 局部内部类仍是一个独立的类,编译后会产生独立的.class文件,但是前面会加上外部类的类名、$符号和数字编号。
  • 只能在作用域范围内使用,先声明后使用,类似局部变量,因此局部内部类不能用权限修饰符。
  • 可以使用外部类的成员,包括私有的。
  • 局部内部类不能使用static修饰,因此也不能包含静态成员。

(2)匿名内部类
某个局部类只需要使用一次,定义在new的后面,隐含实现一个接口或一个类。
Java匿名内部类

标签:Java,内部,基础,Bird,Person,String,public,name
From: https://www.cnblogs.com/zhishu/p/16711275.html

相关文章

  • 五 Java面向对象
    面向对象初识面向对象面向过程&面向对象面向过程思想:步骤清晰简单,第一步做什么,第二步做什么…面对过程适合处理一些较为简单的问题面向对象思想:物以类聚,分......
  • Linux基础-软连接之我的误操作
    软连接事故操作原有是因为服务器的磁盘空间满了,服务器跑的都是容器但是空间不够了,我正在构建Dockerifle镜像,提示空间不足,然后师傅让对docker容器存储目录进行一个迁移......
  • SpringBoot+Vue医患档案管理系统 医院档案管理系统 医院病历管理系统Java Vue MySQL数
    ......
  • Java流程控制05(switch多选择结构)
    多选择结构还有一个实现方式就是switchcase语句switchcase语句判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支语法:switch(表达式){casevalue......
  • Java流程控制01(Scanner)
    用户交互Scanner:之前学习的基本语法中,我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入"Java.util.Scanner"是Java5的新特征,我......
  • Asp.net core基础(一)Entity FrameworkCore的增删查改
    一、EntityFrameworkCore的介绍EntityFrameworkCore是.netcore中的ORM(objectrelationalmapping[对象关系映射])框架,它可以让开发人员以面向对象的方式进行数据库操......
  • 使用ANTLR用Python解析一些Java代码
    我想在Python中使用ANTLR构建一个Java解析器我从ANTLR存储库下载了语法:Lexer:https://github.com/antlr/grammars-v4/blob/master/java/java/JavaLexer.g4分析器:https:/......
  • WPF学习 - 动画基础
    1.WPF中的动画(Animation),是一种属性动画。技术上来说,它是让属性从一个值,变化到另一个值的过程。因此,有两条条重要的特性:1.1只能为依赖属性应用动画 1.2动画只......
  • java大文件(百M以上)的上传下载实现技术
    ​前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对Http协议较模糊,故这次采用渐进的方式来学习文件上传的原......
  • Java学习秘诀
    为互联网新手,选择行业时一定要慎重。如果你想选择编程类的技术工作,可以先从Java了解~那么,Java语言现如今在IT行业内的发展前景如何?现在,很多企业都要和互联网接轨,全面推......