首页 > 编程语言 >Java进阶__抽象、内部类

Java进阶__抽象、内部类

时间:2025-01-08 21:33:15浏览次数:3  
标签:__ 部类 Java 进阶 void 成员 class public 内部

抽象类和抽象方法

抽象方法

  • 使用 abstract 关键字修饰的没有方法体的方法称为抽象方法。
  • 抽象方法必须在子类中被实现,否则子类也需要声明为抽象类。
  • 包含抽象方法的类称为抽象类。
  • 抽象类不能被实例化,不能通过 new 关键字创建对象。

抽象类的特点

  • 抽象类可以包含属性、方法以及构造方法。
  • 构造方法不能通过 new 直接实例化抽象类,只能由子类继承。
  • 抽象类只能被继承,不能直接实例化。
  • 抽象方法必须在子类中被实现,除非子类也声明为抽象类。

示例代码:抽象类与抽象方法

abstract class Animal {
    // 抽象方法:子类必须实现
    abstract void sound();

    // 普通方法
    void sleep() {
        System.out.println("This animal is sleeping.");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Bark");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.sound(); // 输出:Bark
        dog.sleep(); // 输出:This animal is sleeping.
    }
}

内部类

在 Java 中,内部类是定义在另一个类内部的类。与普通类不同,内部类可以访问外部类的成员(包括私有成员),并且可以通过外部类的对象来创建和使用。内部类主要有以下几种类型:

  • 成员内部类
  • 静态内部类
  • 局部内部类(方法内部类)
  • 匿名内部类

为什么要使用内部类

  1. 逻辑上更紧密:内部类能够将相关的类组织在一起,使得类的结构更具层次性,增强代码的封装性。

  2. 访问外部类的成员:内部类可以直接访问外部类的成员,包括私有成员,避免了过多的 getter/setter 方法。

  3. 增强代码可读性:在某些情况下,内部类能够使代码更简洁、可读性更高,尤其是在回调机制、事件监听等场景中。

  4. 封装性:内部类可以隐藏在外部类内部,提高封装性,避免外部代码直接访问。

如何使用内部类

1. 成员内部类

成员内部类定义在外部类的成员位置,它可以访问外部类的所有成员(包括私有成员)。

示例代码:成员内部类
class OuterClass {
    private String outerField = "外部类的私有成员";

    class InnerClass {
        public void display() {
            System.out.println("访问外部类的私有成员: " + outerField);
        }
    }

    public void createInnerClass() {
        InnerClass inner = new InnerClass(); // 创建内部类对象
        inner.display();
    }
}

public class Main {
    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        outer.createInnerClass(); // 调用外部类的方法创建并使用内部类
    }
}

输出:

访问外部类的私有成员: 外部类的私有成员

2. 静态内部类

静态内部类是一个静态的类,它只能访问外部类的静态成员,不能访问外部类的实例成员。

示例代码:静态内部类
class OuterClass {
    private static String staticOuterField = "外部类的静态成员";

    static class StaticInnerClass {
        public void display() {
            System.out.println("访问外部类的静态成员: " + staticOuterField);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass(); // 创建静态内部类对象
        inner.display();
    }
}

输出:

访问外部类的静态成员: 外部类的静态成员

3. 匿名内部类

匿名内部类没有类名,通常用于实现接口或继承类的实例。它在声明的同时就进行实例化,并常用于回调、事件监听等场景。

示例代码:匿名内部类
interface Greeting {
    void greet();
}

public class Main {
    public static void main(String[] args) {
        Greeting greeting = new Greeting() { // 匿名内部类实现Greeting接口
            @Override
            public void greet() {
                System.out.println("Hello from anonymous class!");
            }
        };
        greeting.greet();
    }
}

输出:

Hello from anonymous class!

总结

内部类是 Java 的一项强大特性,它允许在一个类内部定义其他类,从而增强代码的封装性和组织性。通过内部类,外部类可以更方便地管理和使用其成员,同时使得代码的结构更加清晰。在实际开发中,内部类常用于事件处理、回调、数据封装等场景。

标签:__,部类,Java,进阶,void,成员,class,public,内部
From: https://blog.csdn.net/m0_75262878/article/details/144955187

相关文章

  • modint 封装
    structmodint{ intx; staticintMod; constexprstaticvoidsetmod(int_){Mod=_;} intqpow(intb,intp){ if(!p)return1; intd=qpow(b,p>>1); if(p&1)return1ll*d*d%Mod*b%Mod; elsereturn1ll*d*d%Mod; } modint(into=0){x=o;} modin......
  • 河洛理数【陈抟】每年命卦推演每月运卦
        前文我们知道了如何进行每一年年运卦的推演,今天这篇我们讲解在年运卦的基础上如何推演出当前12个月份的月运卦。我们仍直接用书中的举例进行推演,最后做个方法的总结。    假设当年年卦是观卦,元堂在上爻,如图()所示:Step1:自下往上数,从元堂爻的下一爻开始,每......
  • Python在多个Excel文件中找出缺失数据行数多的文件
      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件内、某一列数据的特征,对其加以筛选,并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法。  首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有大量的Excel表格文件(在......
  • HTML+CSS+JS制作中华传统文化主题网站(内附源码,含5个页面)
    一、作品介绍HTML+CSS+JS制作一个中华传统文化主题网站,包含首页、文化艺术页、传统工艺页、文化遗产页、关于我们页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。二、页面结构1.顶部导航区包含网站Logo、主导航菜单(首页、文化分类、活动......
  • 大数据专业毕业设计新颖选题推荐:时间序列预测方向
    目录前言毕设选题开题指导建议更多精选选题选题帮助最后前言大家好,这里是海浪学长毕设专题!大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理了大数据专业最新......
  • HTML+CSS+JS制作中华传统美食主题网站(内附源码,含5个页面)
    一、作品介绍HTML+CSS+JS制作一个中华传统文化主题网站,包含首页、菜系页、食材页、名厨页、美食故事页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。二、页面结构1.顶部横幅导航区包含网站Logo、搜索栏、主导航菜单(首页、菜系分类、美食故......
  • 深度学习目标检测中_构建一个基于YOLOv8的道路裂缝检测系统来处理道路裂缝数据集 4类
    道路裂缝数据集数据集共21041张道路图像,涉及3000+道路损坏实例,数据集包含四种损伤类别的注释:纵向裂缝D00、横向裂缝D10、鳄鱼裂缝D20和坑洞D40;已标注yolo格式、voc格式,可直接用于训练;标签类别及标签个数:D00(6592)、D10(4446)、D20(8381)、D40(5627)构建一个基于YOLOv8的道......
  • 深度学习目标检测使用YOLOv8来训练航拍遥感飞机数据集 yolo
    航拍遥感飞机数据集Yolo格式标注深度学习目标检测使用YOLOv8来训练航拍遥感飞机数据集。以下是详细的步骤和代码示例,包括环境部署、模型训练、指标可视化展示以及PyQt5界面设计。文章代码仅供参考:数据集结构假设你的数据集已经准备好,并且是以YOLO格式存储的。以下......
  • python+django/flask的油田物料管理系统java+nodejs+php-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • python+django/flask的教学资料管理系统java+nodejs+php-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......