Java SE入门及基础(45)

目录

嵌套类(上)

4. 内部类

内部类对象创建语法

示例

5. 局部内部类

示例

6. 匿名内部类

示例

Java SE文章参考:Java SE入门及基础知识合集-CSDN博客


嵌套类(上)

4. 内部类

As with instance methods and variables, an inner class is associated with an instance of its enclosing class and has direct access to that object's methods and fields. Also, because an inner class is associated with an instance, it cannot define any static members itself.
与实例方法和变量一样,内部类与其所在类的实例相关联,并且可以直接访问该对象的方法和字段。 另外,由于内部类与实例相关联,因此它本身不能定义任何静态成员。
内部类对象创建语法
外部类类名 . 内部类类名 对象名 = new 外部类类名 (). new 内部类类名 ();
示例
使用内部类描述一辆汽车拥有一台发动机。
package com . wq . inner . clazz . inner ;
public class Car { // 汽车
        private double price ;
        private String brand ;
        private Engine engine ; // 汽车拥有的发动机
        public Car ( double price , String brand ) {
                this . brand = brand ;
                this . engine = new Engine ( " 国产 " , 20000 );
                this . price = price + engine . price ;
        }
        public Car ( Engine engine , String brand , double price ){
                this . engine = engine ;
                this . brand = brand ;
                this . price = price + engine . price ;
        }
        public void show (){
                this . engine . show ();
        }
        class Engine { // 发动机
                private String type ; // 发动机类型
                private double price ; // 发动机价格
                public Engine ( String type , double price ) {
                this . type = type ;
                this . price = price ;
                }
                public void show (){
                        System . out . println ( brand + " 汽车使用的是 " + type + " 发动机,价格为:" + price );
                //如果内部类中存在于外部类同名的成员变量时,想要使用外部类的同名成员变量,需要加上: 外部类类名.this.变量名
                        System . out . println ( " 汽车总价为: " + Car . this . price );
                }
        }
}
package com . wq . inner . clazz . inner ;
public class CarTest {
        public static void main ( String [] args ) {
                Car c = new Car ( 100000 , " 奥拓 " ); //c 是汽车类的成员,因此 c 对象中有 Engine 类成员
                c . show ();
                Car . Engine engine = new Car ( 100000 , " 奥拓 " ). new Engine ( " 进口 " , 50000 );
                Car c1 = new Car ( engine , " 奔驰 " , 150000 );
                c1 . show ();
                Car . Engine engine1 = c . new Engine ( " 进口 " , 50000 );
                Car c2 = new Car ( engine1 , " 奔驰 " , 165600 );
                c2 . show ();
        }
}

5. 局部内部类

Local classes are classes that are defined in a block, which is a group of zero or more statements between balanced braces. You typically find local classes defined in the body of a method.
局部类是在一个块中定义的类,该块是一组在平衡括号之间的零个或多个语句。 通常,你会在方法的主体中找到定义的局部类。
示例
使用局部内部类描述使用计算器计算两个数的和。
package com . wq . inner . clazz . local ;
public class LocalClass {
        public static void main ( String [] args ) {
                int result = calculate ( 1 , 3 );
                System . out . println ( result );
        }
        public static int calculate ( int a , int b ){
        class Calculator {
                private int num1 , num2 ;
                public Calculator ( int num1 , int num2 ) {
                        this . num1 = num1 ;
                        this . num2 = num2 ;
                }
                public int calculate (){
                        return num1 + num2 ;
                }
        }
        Calculator c = new Calculator ( a , b );
                return c . calculate ();
        }
}

6. 匿名内部类

Anonymous classes enable you to make your code more concise. They enable you to declare and instantiate a class at the same time. They are like local classes except that they do not have a name. Use them if you need to use a local class only once.
匿名类可以使你的代码更简洁。 它们使你在声明一个类的同时实例化它。 除了没有名称外,它们类似于局部类。 如果只需要使用一次局部类,则使用它们。
The syntax of an anonymous class expression is like the invocation of a constructor, except that there is a class definition contained in a block of code.
匿名类表达式的语法类似于构造方法的调用,不同之处在于代码块中包含类定义。
示例
package com . wq . inner . clazz . anonymous ;
public interface Calculate {
        int calculate ( int a , int b );
}
package com . wq . inner . clazz . anonymous ;
public abstract class Animal {
        public abstract void eat ();
}
package com . wq . inner . clazz . anonymous ;
public class Student {
        protected String name ;
        protected int age ;
        public Student ( String name , int age ) {
                this . name = name ;
                this . age = age ;
        }
        public void show (){
                System . out . println ( name + "\t" + age );
        }
}
package com . wq . inner . clazz . anonymous ;
public class AnonymousClass {
        public static void main ( String [] args ) {
                int result = calculate ( 10 , 20 );
                System . out . println ( result );   
                Animal a = new Animal () {
                @Override
                public void eat () {
                        System . out . println ( " 老虎吃肉 " );
                }
        };
                a . eat ();
                Student stu = new Student ( " 好奇怪 " , 20 ){
                @Override
                public void show () {
                        System . out . println ( age );
                }
        };
                stu . show ();
        }
        public static int calculate ( int a , int b ){
        //匿名内部类跟构造方法的调用很相似,不同的地方在于:匿名内部类里面还有类的主体
                Calculate c = new Calculate () {
                @Override
                public int calculate ( int a , int b ) {
                        return a + b ;
                }
        };
        return c . calculate ( a , b );
        }
}

Java SE文章参考:Java SE入门及基础知识合集-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】【设计模式】动态代理

因为需要看spring源代码,看到代理这个词看不懂,后面顺着线索发现需要学习一下设计模式的动态代理,然后疯狂补课,结果发现,都不知道在说什么例子给的也比较抽象,好在自己付出快4小时还是有一些微弱的感悟的。…

Spring Cloud: openFegin使用

文章目录 一、OpenFeign简介二、Springboot集成OpenFeign1、引入依赖2、EnableFeignClients注解(1)应用(2)属性解析 3、 FeignClient(1)应用(2)属性解析(3)向…

基于百度地图实现Android定位功能实现(一)

Android集成百度地图 文章目录 Android集成百度地图前言准备工作创建工程申请密钥 在项目中集成BaiduMap SDK创建地图 前言 本案例使用百度地图实现在Android中集成地图,并且实现了普通地图/卫星地图,以及路况图和热状图功能; 参考技术文档&…

Android SQLite的使用

前言 本文用于介绍SQLite,SQLite是Android内置的数据库,是一款轻量级的关系型数据库。它具有运算速度快、占用资源少等优点。支持SQL语法同时遵循数据库的ACID事务。 创建数据库 Android为我们提供了一个SQLiteOpenHelper帮助类,我们可以在…

MTU/TCPMSS/VLAN/ACCESS/TRUNK/HYBRID

MTU RFC标准定义以太网的默认MTU值为1500 最小64字节是为了保证最极端的冲突能被检测到,64字节是能被检测到的最小值;最大不超过1518字节是为了防止过长的帧传输时间过长而占用共享链路太长时间导致其他业务阻塞。所以规定以太网帧大小为64~1518字节&am…

OpenFeign使用

OpenFeign天然支持负载均衡 想要去消费接口的API的服务引入pom依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 主启动类上加注解 EnableFeignC…

C++入门(二)

目录 函数重载&#xff1a; 函数重载概念&#xff1a; 参数类型不同&#xff1a; 参数个数不同&#xff1a; 参数类型顺序不同&#xff1a; C支持函数重载的原理--名字修饰&#xff1a; 引用&#xff1a; 引用概念&#xff1a; 引用特性&#xff1a; 常引用&#xff1…

网页的血液——javascript

1.简介 网络开发唯一可选语言&#xff0c; 增加网页动态性与交互性&#xff0c;服务端开发&#xff0c; Nodejs&#xff0c;可以进行数据库文件读写 2.引入 html内部使用script标签&#xff0c;在script内部直接编写js 在外部js文件中编写&#xff0c;在script内部通…

JJJ:linux系统中第一个进程

以linux4.19内核linux系统中第一个进程。 执行shell指令 ps -ef 结果如下&#xff1a; xxxxxx-virtual-machine:~$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 20:55 ? 00:00:02 /sbin/init splash root …

【机器学习300问】58、什么是词袋模型和N-gram模型?

词袋模型&#xff08;Bag of Words, BoW&#xff09;和N-gram模型主要用于早期的自然语言处理任务&#xff0c;上文中我介绍了机器是如何读懂文本的四个阶段&#xff0c;这篇文章带大家来看看在不同阶段中会用到的两个模型——词袋模型和N-gram模型。如果没有读过我之前的文章&…

C语言二进制常用逻辑运算符介绍与使用

在C语言中&#xff0c;二进制常用的逻辑运算符包括与&#xff08;AND&#xff09;、或&#xff08;OR&#xff09;、非&#xff08;NOT&#xff09;&#xff0c;以及异或&#xff08;XOR&#xff09;。以下是它们的介绍和使用方法&#xff1a; 与&#xff08;AND&#xff09;&a…

Nodejs 第六十章(http缓存)

HTTP缓存 HTTP 缓存主要分为两大类&#xff1a;强缓存和协商缓存。这两种缓存都通过 HTTP 响应头来控制&#xff0c;目的是提高网站性能。 强缓存介绍 强缓存之后则不需要向服务器发送请求&#xff0c;而是从浏览器缓存读取分为&#xff08;内存缓存&#xff09;| &#xff…

HarmonyOS 应用开发之FA模型与Stage模型应用组件

应用配置文件概述&#xff08;FA模型&#xff09; 每个应用项目必须在项目的代码目录下加入配置文件&#xff0c;这些配置文件会向编译工具、操作系统和应用市场提供描述应用的基本信息。 应用配置文件需申明以下内容&#xff1a; 应用的软件Bundle名称&#xff0c;应用的开发…

《Long-CLIP: Unlocking the Long-Text Capability of CLIP》

论文:https://arxiv.org/pdf/2403.15378.pdf源码:https://github.com/beichenzbc/Long-CLIP 导读 CLIP(Contrastive Language–Image Pre-training),这个由 OpenAI 团队开源的多模态预训练模型,它通过对比学习的方式,同时学习图像和文本的表示,从而实现在没有针对特定…

坐标变换矩阵之平移-opencv

平移矩阵m&#xff0c;平移向量(tx,ty,tz) double tx10.2; double ty0.0; double tz0.0; cv::Mat m cv::Mat::eye(4, 4, CV_64FC1);//单位矩阵 m.at<double>(0,3)tx; m.at<double>(1,3)ty; m.at<double>(2,3)tz;齐次点p(1,0,0,1)&#xff0c; cv::Mat p(4…

ESD保护二极管ESD9B3.3ST5G 以更小的空间实现强大的保护 车规级TVS二极管更给力

什么是汽车级TVS二极管&#xff1f; TVS二极管是一种用于保护电子电路的电子元件。它主要用于电路中的过电压保护&#xff0c;防止电压过高而损坏其他部件。TVS二极管通常被称为“汽车级”是因为它们能够满足汽车电子系统的特殊要求。 在汽车电子系统中&#xff0c;由于车辆启…

SEO文章写作器,批量写作原创SEO收录文章

在当今数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了网站获得流量和曝光度的关键手段之一。而在SEO领域中&#xff0c;内容的质量和原创性是至关重要的。为了应对不断增长的内容需求&#xff0c;越来越多的人开始转向AI写作生成器&#xff0c;这些…

ChatGPT如何升级为GPT-4在国内

通过 WildCard 可以把ChatGPT升级为GPT-4 地址 1: 2155 Bailey Hill Rd 城市: Eugene 邮编: 97405 州: Oregon ChatGPT Plus/Team 一键升级&#xff0c;几分钟即可自动升级到 ChatGPT Plus。 选择我的邮箱账号符合要求 复制这个页面的链接即可 复制上面的link 到请在…

32-4 APP渗透 - APP渗透与防御

一、APP渗透测试流程 准备阶段: 确定安全测试的范围,包括受测方的测试目标和敏感数据。获取被测单位的书面盖章渗透测试授权,确保合法性和透明度。(重要)信息搜集: 收集关于APP的环境、业务用例和架构等信息,了解目标系统的特点和运行环境。可以使用各种信息收集工具和技术…

通俗易懂:什么是Java虚拟机(JVM)?它的主要作用是什么?

Java虚拟机&#xff08;Java Virtual Machine, JVM&#xff09;是一种软件实现的抽象计算机&#xff0c;它负责执行Java字节码&#xff08;Bytecode&#xff09;。Java程序并不是直接在物理计算机上运行&#xff0c;而是先由Java编译器将源代码编译成与平台无关的字节码&#x…