Java 内部类

简介

在 Java 中,可以嵌套类(即类内部的类),称为内部类。嵌套类的目的是将属于一起的类分组,从而使您的代码更可读和可维护。

访问内部类

要访问内部类,请创建外部类的对象,然后创建内部类的对象:

class OuterClass {
int x = 10; class InnerClass {
int y = 5;
}
} public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}

私有内部类

与 “普通” 类不同,内部类可以是私有的或受保护的。如果不希望外部对象访问内部类,请将类声明为私有:

class OuterClass {
int x = 10; private class InnerClass {
int y = 5;
}
} public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass(); // 错误:无法访问私有内部类
System.out.println(myInner.y + myOuter.x);
}
}

静态内部类

内部类也可以是静态的,这意味着可以在不创建外部类对象的情况下访问它:

class OuterClass {
int x = 10; static class InnerClass {
int y = 5;
}
} public class Main {
public static void main(String[] args) {
OuterClass.InnerClass myInner = new OuterClass.InnerClass();
System.out.println(myInner.y);
}
}

注意: 静态内部类不能访问外部类的成员,就像静态属性和方法一样。

从内部类访问外部类

内部类的一个优势是,它们可以访问外部类的属性和方法:

class OuterClass {
int x = 10; class InnerClass {
public int myInnerMethod() {
return x;
}
}
} public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.myInnerMethod()); // 10
}
}

内部类提供了许多优势,例如:

  • 提高代码的可读性和可维护性
  • 允许访问外部类的成员
  • 可以是静态的,以便在不创建外部类对象的情况下使用

请根据您的需要选择合适的内部类类型。

Java 抽象类和方法

数据抽象

数据抽象是隐藏某些细节并仅向用户显示必要信息的过程。

抽象可以通过抽象类或接口来实现

抽象类

抽象类是一种受限制的类,不能用于创建对象(要访问它,必须从另一个类继承)。

抽象类可以使用 abstract 关键字声明。

抽象方法

抽象方法是一种只能在抽象类中使用的方法,它没有具体的实现体,具体的实现由子类提供。

抽象方法可以使用 abstract 关键字声明。

示例

abstract class Animal {
public abstract void animalSound(); public void sleep() {
System.out.println("Zzz");
}
} class Pig extends Animal {
@Override
public void animalSound() {
System.out.println("The pig says: wee wee");
}
} class Main {
public static void main(String[] args) {
Pig myPig = new Pig();
myPig.animalSound();
myPig.sleep();
}
}

输出:

The pig says: wee wee
Zzz

为什么使用抽象类和方法?

  • 为了实现安全性 - 隐藏对象的某些细节,仅显示其重要细节。
  • 为了促进代码重用 - 抽象类可以提供通用的功能,子类可以根据需要进行扩展。
  • 为了提高代码的可读性和可维护性 - 抽象类可以帮助将代码组织成逻辑模块。

注意

  • 抽象类不能被实例化。
  • 抽象类可以包含抽象方法和常规方法。
  • 子类必须重写所有抽象方法,否则子类也是抽象类。

总结

抽象类和方法是 Java 中重要的概念,它们可以帮助您编写更安全、更可重用和更易于维护的代码。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

Java 抽象类与方法:实现安全性与代码重用的更多相关文章

  1. Java抽象类中的抽象方法的参数对应的子类的方法的参数必须一致吗?

    同学你这个涉及了两个概念. 一个是抽象方法,一个是方法重载. 先说下概念: 抽象方法就是abstract描述的方法,它本身不含实现,必须由子类实现. 方法重载则是同一个方法名,但是参数类型或者参数个数 ...

  2. java抽象类

    Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不 ...

  3. Java抽象类接口、内部类题库

    一.    选择题 1. Person类和Test类的代码如下所示,则代码中的错误语句是(  C  ).(选择一项)   public class Person { public String nam ...

  4. java抽象类与接口的区别及用法

    java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...

  5. java mail实现Email的发送,完整代码

    java mail实现Email的发送,完整代码 1.对应用程序配置邮件会话 首先, 导入jar <dependencies> <dependency> <groupId ...

  6. Java 抽象类与接口总结

    一.为什么要使用抽象类?有什么好处? 抽象类是通用接口.不同的子类可以用不同的方法表示此接口.通用接口建立起一种基本形式,以此表示所有子类的共同部分. 必须覆写父类abstract抽象的方法  含有抽 ...

  7. JAVA抽象类和接口的深入探讨

    Java 语言中,抽象类(abstract class) 和接口(interface) 是抽象思想的两种体现形式.初学者很容易把这两者搞混,所以Java面试中考抽象类和接口的区别的面试题也常有出现的. ...

  8. Java项目源码为什么要做代码混淆(解释的很好)

    代码混淆,是将计算机程序的代码转换成一种功能上等价,但是难于阅读和理解的形式的行为.代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码.执行代码混淆的程序被称作代码混淆器.目前已经存在许多种 ...

  9. 我对面向对象设计的理解——Java接口和Java抽象类

    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...

  10. Java抽象类、接口整理

    抽象类 5.1抽象类产生(上标为A) 编写一个类时,会给该类定义一些方法,这些方法是用来描述功能和具体实现的方式,这些方法都有方法体 例如:一个图形类应该有周长的方法,但是不同的图形求周长方法不一样. ...

随机推荐

  1. 修改centos7虚拟机的用户密码

    在忘记原密码无法登录桌面的情况下,修改centos7的用户密码 非常规启动,进入编辑启动菜单 在启动GRUB菜单中选择编辑选项,按键e进入编辑; 找到linux16开头的一行,在该行中寻找ro的所在地 ...

  2. git的 .gitignore 配置概述

    git的 .gitignore 配置概述 学习背景:自己在使用git时发现有时会上传很多无用的配置文件,或者在项目中已经包含一个本地的git仓库,导致上一级项目上传总是报错,所以学习采用gitigno ...

  3. [学习笔记].Net5项目打包到Linux系统服务时遇到的坑

    ​如果按照官方文档的步骤手动安装.Net5 会有一个坑: 在 Linux 上手动安装 .NET - .NET | Microsoft Docs 在使用systemd打包.Net5服务的时候,无法运行, ...

  4. Zabbix_get基础命令浅析

    zabbix_get是Zabbix监控系统的一个命令行工具,可以用于从Zabbix服务器或代理获取数据.以下是zabbix_get的基本使用方法: 1.获取一个单独的键值对 使用以下命令可以获取一个单 ...

  5. FreeRTOS教程3 中断管理

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...

  6. npm install --legacy-peer-deps 安装出现依赖包冲突的解决方案

    npm install --legacy-peer-deps 安装出现依赖包冲突的解决方案 为什么 在安装依赖包的时候,会有依赖包的冲突 比如A包引用了C的1.0版本 B包依赖了C的1.1版本 win ...

  7. obs 屏幕录像 1. 屏幕放大缩小 2. 圆形摄像头

    obs 屏幕录像 1. 屏幕放大缩小 2. 圆形摄像头 屏幕放大缩小 windows 放大镜 屏幕放大快捷键 win + '+' 是放大屏幕 win + '-' 是缩小屏幕 因为obs不支持缩放功能, ...

  8. 13 种在 JavaScript 中删除/过滤数组的方法【转】

    英文 | https://javascript.plainenglish.io/13-methods-to-remove-filter-an-item-in-an-array-and-array-of ...

  9. nginx四层和七层负载的配置

    四层负载和七层负载是两种不同类型的负载均衡策略,它们分别在网络的不同层次上工作.在Nginx中,这两种负载均衡策略可以通过配置nginx.conf文件来实现. 四层负载(L4 Load Balanci ...

  10. Pod的优先级(priorityClass)和抢占策略(preemptionPolicy)

    Pod优先级 Pod优先级是一个用于指示Pod相对重要程度的整数值.优先级高的Pod在调度时会优先被考虑,并且在资源不足时,优先级较低的Pod可能会被驱逐以释放资源给优先级较高的Pod.Pod优先级的 ...