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. Kotlin return@xxx 的坑

    Kotlin Return 到标签 先看例子: (1..5).forEach { if (it == 3) { return@forEach } println(it) } println(" ...

  2. HashMap源码窥探

    目录 前言 HashMap的数据结构 HashMap的put方法 HashMap的get方法 HashMap的初始化 HashMap的containsKey方法 HashMap的putAll方法 Ha ...

  3. OPPO 自研大规模知识图谱及其在数智工程中的应用

    导读:OPPO 知识图谱是 OPPO 数智工程系统小布助手团队主导.多团队协作建设的自研大规模通用知识图谱,目前已达到数亿实体和数十亿三元组的规模,主要落地在小布助手知识问答.电商搜索等场景. 本文主 ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (206)-- 算法导论15.4 3题

    三.设计 LCS-LENGTH的带备忘的版本,运行时间为O(mn).需要写代码的时候,请用go语言. 文心一言,代码正常运行: LCS-LENGTH(Longest Common Subsequenc ...

  5. 出海业务如何搭建国内也能快速访问的https网站与接口(无需备案)

    背景信息 由于最近在搭建我的出海网站 https://www.idatariver.com/zh-cn , 感兴趣的可以看看. 其中一个环节便是给后端API接口加上ssl,毕竟http看着不如http ...

  6. picgo+gitee+typora实现博客图床

    背景 在微信公众号编写了推文后,从推文里面复制内容出来在其他平台发布,会出现图片展示不出来的情况,原因是因为该图片是微信的链接,被限制在其他平台显示. 诉求 编写的推文在多个平台都能进行发布,图片在多 ...

  7. vscode 对js文件不格式化的修正方案 settings.json

    修正1 "javascript.format.enable": true, // 这里false 改true 修正2 注释掉这个地方 // "[javascript]&q ...

  8. WPF之控件布局

    目录 控件概述 WPF的内容模型 各类内容模型详解 ContentControl族 HeaderedContentControl族 ItemsControl族 ListBox:在XAML中添加数据 L ...

  9. 蓝牙BLE无线控制氛围灯解决方案之特色解析

    谁的方案?   前几天和一个小伙伴讨论方案公司的价值,他给出定位还是比较准确地,作为一家方案公司,就是让产品公司,低成本,快速的推出具有市场竞争力的产品.凭借着本团队在无线蓝牙领域的深耕,这些年也做了 ...

  10. Linux int型转换为char*型几种方法总结

    一 前记 这种转换,windows下最常用就是atoi()函数.可惜的是,在Linux中没有itoa()函数,只有atoi()   这点很有趣,居然不对称. 所以在Linux中实现从整型到char*的 ...