首页 > 编程语言 >Java拾贝第五天——内部类

Java拾贝第五天——内部类

时间:2023-10-18 22:34:20浏览次数:36  
标签:Java 拾贝 内部 void class 第五天 out public Out

Java拾贝不建议作为0基础学习,都是本人想到什么写什么

内部类

在类中可以定义成员变量和方法,而且还可以定义一个类。

一般内部类分为四种:
成员内部类、局部内部类、静态内部类、匿名内部类。

成员内部类

成员内部类就好像成员变量一样,定义在类的内部。

class Out {
    private int num = 10;//成员变量

    private void say() {};//方法

    class In {
	private int x = 0;
        public void tell() {}
    }
}

那么此时,Out类称之为外部类。In类称之为内部类

内部类作为外部类的内部结构,自然可以访问外部类的私有属性和方法。

public class Test6 {
    public static void main(String[] args) {
        Out out = new Out();
        out.T();

    }
}

class Out {//外部类
    private int num = 10;

    private void say() {
        System.out.println("外部类的私有方法");
    }
    public void T() {//外部类的T方法
        In in = new In();//外部类想要访问内部类需初始化
        in.tell();
    }

    class In {//内部类
        public void tell() {
            num = 5;//可以访问外部类的私有属性
            say();//可以访问外部类的私有方法
            System.out.println(num);
        }
    }
}
/*
外部类的私有方法
5
*/

虽说方法内部执行顺序是从上至下,但类的内部结构是平级。

内部类的实例不能单独存在,需初始化外部类之后再初始化内部类

public class Test6 {
    public static void main(String[] args) {
        Out out = new Out();
        Out.In in = out.new In();
	//Out.In in = new Out().new In();等价
        in.tell();
    }
}
class Out {//外部类
    private int num = 10;

    private void say() {
        System.out.println("外部类的私有方法");
    }
    class In {//内部类
        public void tell() {
            num = 5;//可以访问外部类的私有属性
            say();//可以访问外部类的私有方法
            System.out.println(num);
        }
    }
}
/*
外部类的私有方法
5
*/

内部类属性的访问顺序

public class Test6 {
    public static void main(String[] args) {
        Out.In in = new Out().new In();
        in.tell();
    }
}

class Out {//外部类
    private int i = 10;

    class In {//内部类
        private int i = 20;
        public void tell() {
            int i = 30;
            System.out.println(i);
            System.out.println(this.i);//访问内部类的成员变量
            System.out.println(Out.this.i);//内部类访问外部类的属性/方法的方式
        }
    }
}
/*
30
20
10
*/

局部内部类

局部内部类就好像局部变量,其访问权限也仅限于其作用域内

public class Test6 {
    public static void main(String[] args) {
        Out out = new Out();
        out.tell(15);
    }
}

class Out {//外部类
    private int i = 10;
    public void tell(final int temp) {
        int x = 10;
        class In {//局部内部类 与局部变量类似
            public void say() {
                i = 11;//内部类可以访问外部类私有属性和方法
                x=11;//报错,访问不到x
                System.out.println(i);
                System.out.println(temp);//想要访问形参temp必须加上final
            }
        }
        In in = new In();//在方法内部创建内部类对象并调用其方法。
        in.say();
    }
    public void tell2(){//因为是局部内部类,这里访问不到。
        In in = new In();
        in.say();
    }
}

静态内部类

用static修饰的内部类,只能调用外部类的静态属性或静态方法

public class Test6 {
    public static void main(String[] args) {
        Out.In in = new Out.In();//注意这里没有初始化Out的实例。
        in.tell();
        in.say();//运行过程中会自动修改为  Out.In.say();
        Out.In.say();

    }
}

class Out {//外部类
    private int i = 10;
    private static int j = 11;

    private void T() {
        System.out.println("私有T方法");
    }

    private static void F() {
        System.out.println("静态F方法");
    }

    static class In {//静态内部类
        public void tell() {
            i = 11;//只能访问静态属性
            j = 12;
            T();//只能访问静态方法
            F();
        }
        public static void say() {
            i = 11;//只能访问静态属性
            j = 12;
            T();//只能访问静态方法
            F();
        }
    }
}

因为静态属于类,所以上述代码中静态In类属于外部类Out。

Out.In.say();

可以使用上述代码访问其say方法。

当需要访问静态内部类的非静态方法时:

//非静态方法需要实例调用
Out.In in = new Out.In();
in.tell();

若需要访问静态内部类的静态方法时:

Out.In.say();

匿名内部类

待学习

标签:Java,拾贝,内部,void,class,第五天,out,public,Out
From: https://www.cnblogs.com/Ocraft/p/17773538.html

相关文章

  • 算法之空间复杂度以及评判算法的标准(Java)
    一:概述//例如:给出一些整数n:31254972,其中//有两个整数是重复的,要找出这两个重复地整数。//对于这个简单的需求,可以使用很多的思路类解决,其中最朴素的就是//双重循环//遍历整个数列,每遍历一个新的整数就开始回顾//之前遍历过的所有整数。//即第1步:遍历整数3,前面没有......
  • 23.10.18(常用Java异常处理情况整合)
    在JAVA项目中,异常处理是一项非常重要的任务。合理处理异常能够提高程序的稳定性和可靠性,保证程序的正常运行。下面是关于JAVA项目中常用的异常处理情况的总结:1.空指针异常(NullPointerException):在使用一个空对象的成员变量或方法时会抛出该异常。可以通过判断对象是否为空来避免......
  • javaweb第10章源码
    javaweb第10章源码下载链接:https://wwpv.lanzoue.com/iDhBE1c5hcxg文件结构CHAPTER10│.classpath│.project│chapter10.iml│├─.idea│encodings.xml│misc.xml│modules.xml│workspace.xml│├─.settings│.jsdtscope......
  • 23.10.18 Java当中的异常处理
    Java当中的异常处理在Java中,异常是指在程序执行期间发生的错误或异常情况,可以分为两种类型:受检异常(CheckedException)和非受检异常(UncheckedException)。受检异常:受检异常是指需要在代码中显式处理的异常,通常继承自Exception类的子类。例如,IOException和SQLException是受检异......
  • 在JavaScript中,`!!`(不是not)操作符的作用是什么?
    内容来自DOChttps://q.houxu6.top/?s=在JavaScript中,!!(不是not)操作符的作用是什么?我看到了一些代码,似乎使用了我不知道的操作符,形式为两个感叹号,就像这样:!!。有人能告诉我这个操作符是做什么的吗?我看到这个操作符的上下文是:this.vertical=vertical!==undefined?!!ver......
  • javacv入门
    第一章:javacv介绍了解javacv的历史和发展背景JavaCV是一个开源的Java框架,它提供了基于Java的接口,用于访问各种计算机视觉库和工具包,如OpenCV、FFmpeg等。JavaCV旨在为Java开发人员提供快速、简单和可靠的图像和视频处理能力。JavaCV的历史可以追溯到2007年,当时一个名为“JavaCP......
  • docker入门加实战—部署Java和前端项目
    docker入门加实战—部署Java和前端项目部署之前,先删除nginx,和自己创建的dd两个容器:dockerrm-fnginxdd部署Java项目作为演示,我们的Java项目比较简单,提供了一个接口:配置文件连接docker里的mysql:打包如下:DockerFIle文件如下:#基础镜像FROMopenjdk:11.0-jre-buster......
  • 《Java 8实战》PDF高清高质量电子书
    下载:https://pan.quark.cn/s/c6c7603af158......
  • 基于Java Web的多功能旅游网站的设计与实现-计算机毕业设计源码+LW文档
    摘 要 随着时代的发展,人们对旅游也越来越重视,近些年来我国的旅游产业也发生了翻天覆地的变化,但是很多人在出去旅游的时候不知道去哪里旅游,在预订酒店和机票的时候也没有一个综合性的旅游网站,为了让人们的旅游变的更加的方便,为此我开发了本基于JavaWeb的多功能旅游网站本基于......
  • Java如何实现HTTP断点续传功能
    其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已,本文将详细介绍Java如何实现HTTP断点续传功能,需要的朋友可以参考下 (一)断点续传的原理其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发......