java面向对象进阶进阶篇--《抽象类和抽象方法》

news2024/9/22 13:35:48

个人主页VON

所属专栏java从入门到起飞

 

目录

个人主页​编辑我的主页​编辑

一、简介

抽象方法:

抽象类:

概述:

二、抽象类

特点和用途

示例:

Animal类

 Dog类

 Flog类

Sheep类

Text类

结果展示:

三、抽象方法

特点和用途

示例:

注意事项


一、简介

抽象方法:

抽象方法是没有方法体的方法,只有方法声明(方法名、参数列表、返回类型)。使用 abstract 关键字声明。

抽象类:

抽象类是用 abstract 关键字声明的类,不能直接实例化对象,主要用于被继承。

概述:

抽象方法和抽象类是面向对象编程中用于实现抽象和多态性的重要概念。抽象方法用于定义接口规范,由子类实现具体行为;抽象类则为子类提供了部分实现,并约束子类必须实现的方法。通过抽象方法和抽象类,Java可以更灵活地组织和设计代码结构,提高代码的可维护性和扩展性。

二、抽象类

抽象类(Abstract Class)是Java中一种特殊的类,它不能被实例化,即不能直接创建对象。其主要目的是为了被继承,子类可以通过扩展抽象类来实现其定义的抽象方法和非抽象方法。

特点和用途

  • 不能被实例化:抽象类不能直接创建对象,只能被用作其他类的父类。

  • 包含抽象方法:抽象类中可以包含抽象方法(没有方法体的方法),这些方法必须在子类中被实现(即重写)才能使用。

  • 可以有普通方法:抽象类不仅可以包含抽象方法,还可以包含具体实现的普通方法。子类继承抽象类时,可以选择性地覆盖这些方法。

  • 用于类的继承:通过继承抽象类,子类可以获得父类的结构和行为,同时根据需要实现父类定义的抽象方法,从而实现多态性和代码复用。

示例:

 注:使用抽象类时要使用抽象方法

Animal类

package com.von.day14;

public abstract class Animal {
    private String name;
    private int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void drink(){
        System.out.println("动物在喝水");
    }

    public abstract void eat();
}

 Dog类

package com.von.day14;

public class Dog extends Animal{
    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat(){
        System.out.println("狗吃骨头");
    }
}

 Flog类

package com.von.day14;

public class Frog extends Animal{
    public Frog() {
    }

    public Frog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat(){
        System.out.println("青蛙吃虫");
    }
}

Sheep类

package com.von.day14;

public class Sheep extends Animal{
    public Sheep() {
    }

    public Sheep(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat(){
        System.out.println("山羊吃草");
    }
}

Text类

package com.von.day14;

public class text {
    public static void main(String[] args) {
        Frog f=new Frog("张三",18);
        System.out.println(f.getName()+","+f.getAge());
        f.drink();
        f.eat();

        Dog d=new Dog("李四",19);
        System.out.println(d.getName()+","+d.getAge());
        d.drink();
        d.eat();

        Sheep s=new Sheep("王五",20);
        System.out.println(s.getName()+","+s.getAge());
        s.drink();
        s.eat();
    }
}

结果展示:

三、抽象方法

抽象方法(Abstract Method)是Java中定义在抽象类或者接口中的方法,它没有方法体,只有方法签名(包括方法名、参数列表和返回类型)。抽象方法必须在子类中被重写(实现),否则这些子类也必须声明为抽象类。

特点和用途

  • 没有方法体:抽象方法没有方法体,即不包含方法的具体实现。

  • 必须在抽象类或接口中:抽象方法只能存在于抽象类或接口中。抽象类可以包含抽象方法和具体方法,而接口中的方法默认都是抽象方法。

  • 强制子类实现:子类继承抽象类或实现接口时,必须实现其中的抽象方法,否则子类也必须声明为抽象类。

  • 多态性:抽象方法的存在使得多态性得以实现。通过父类或接口的引用指向子类对象,可以调用子类实现的抽象方法,实现不同对象的不同行为。

示例:

// 抽象类
abstract class Animal {
    // 抽象方法,没有方法体
    abstract void makeSound();

    // 普通方法,有方法体
    void eat() {
        System.out.println("Animal is eating");
    }
}

// 子类继承抽象类并实现抽象方法
class Dog extends Animal {
    // 实现抽象方法
    void makeSound() {
        System.out.println("Dog barks");
    }
}

// 另一个子类也可以继承抽象类并实现抽象方法
class Cat extends Animal {
    // 实现抽象方法
    void makeSound() {
        System.out.println("Cat meows");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog(); // 使用多态性,编译时类型为Animal,运行时类型为Dog
        dog.makeSound(); // 调用子类实现的抽象方法
        dog.eat(); // 调用继承的普通方法

        Animal cat = new Cat(); // 同样可以使用多态性
        cat.makeSound();
        cat.eat();
    }
}

注意事项

  • 抽象方法不能被声明为私有(private),因为私有方法不能被子类重写。
  • 如果一个类包含抽象方法,那么该类必须声明为抽象类(使用 abstract 关键字)。但是,抽象类中可以包含普通方法。
  • 抽象方法在子类中必须被实现,除非子类也是抽象类。

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

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

相关文章

鸿蒙OpenHarmony Native API【raw_dir.h与raw_file.h】 头文件

raw_dir.h Overview Related Modules: [Rawfile] Description: 提供rawfile目录相关功能 功能包括遍历和关闭rawfile目录 Since: 8 Version: 1.0 Summary Typedefs Typedef NameDescription[RawDir]typedef struct [RawDir] 提供对rawfile目录的访问 Functions Fun…

Centos7下安装配置最新版本Jenkins

1、基础环境配置 1.1 服务器下载Jenkins安装包 下载地址:Download and deploy 下载命令:wget https://get.jenkins.io/war-stable/2.452.3/jenkins.war 1.2 服务器安装配置JDK Jenkins 是基于 Java 语言开发的,因此需要 Java 运行环境支…

【Mysql】Docker下Mysql8数据备份与恢复

[TOC] 【Mysql】Docker下Mysql8数据备份与恢复 1 创建Mysql容器 格式 docker run -d --name容器名称 -p 宿主端口号:3306 -e MYSQL_ROOT_PASSWORDmysql密码 -e MYSQL_PASSWORDmysql密码 -e TZAsia/Shanghai -v 宿主目录-数据:/var/lib/mysql -v 宿主目录-备份数据:/back…

在vue中优雅地异步引入(懒加载)腾讯地图API

背景 接到一个需求需要在网站首页显示使用腾讯地图展示公司所在地。一开始我直接全局引入了腾讯地图js,结果发现在用户打开登陆页面的时候首页比较缓慢,为了提高用户登陆的加载效率,需要优化为异步引入。 思路 根据官网的示例,…

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析 任务一、操作系统取证解析:总结:任务一、操作系统取证解析: A 集团某电脑系统被恶意份子攻击并控制,怀疑其执行了破坏操作,窃取了集团内部的敏感信息,现请分析 A 集团提供的系统镜像和内存镜像,找到…

缓存穿透,缓存击穿,缓存雪崩

目录 介绍 缓存穿透 缓存击穿 缓存雪崩 原因 影响 解决方案 缓存穿透 防止缓存穿透->空值缓存案例 缓存击穿 使用互斥锁解决缓存击穿 介绍 缓存穿透 定义:缓存穿透是指用户查询数据,缓存和数据库中都不存在该数据(一般是发起恶意…

Nginx笔记(一)

一、Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 [13],同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.…

maven项目容器化运行之3-优雅的利用Jenkins和maven使用docker插件调用远程docker构建服务并在1Panel中运行

一.背景 在《maven项目容器化运行之1》中,我们开启了1Panel环境中docker构建服务给到了局域网。在《maven项目容器化运行之2》中,我们基本实现了maven工程创建、远程调用docker构建镜像、在1Panel选择镜像运行容器三大步骤。 但是,存在一个问…

影视剪辑(自媒体)工具下载地址

一、资源下载网址 片库(资源较全): 中国大陆线路:https://www.btnull.nuhttps://www.btnull.nuhttps://www.btnull.inhttps://www.btnull.in 其他网址: https://www.btnull.comhttps://www.btnull.com…

Oracle export 时expdp 表顺序每次不同的

同样的expdp 200张表,expdp 的命令一样,但是export log出来的表顺序也是不同的。 expdp parallel 4 impdp parallel 8 也是可以 File Size(MB)Export ElapsedImport ElapsedAKA2865MB0:04:230:20:02imp disable constraint paral…

畅游时空|虚拟世界初体验,元宇宙游戏如何开发?

在元宇宙中,用户可以通过虚拟身份进行互动、社交、工作和娱乐,体验与现实世界平行的生活和活动。元宇宙不仅仅是一个虚拟空间,更是一个融合了虚拟和现实的生态系统,具有巨大的发展潜力和应用前景。 在不断发展的数字环境中&#x…

MySQL的账户管理

目录 1 密码策略 1.1 查看数据库当前密码策略: 1.2 查看密码设置策略 1.3 密码强度检查等级解释(validate_password.policy) 2 新建登录账户 3 账户授权 3.1 赋权原则 3.2 常见的用户权限 3.3 查看权限 3.4 赋权语法 4 实例 4.1 示例1&#x…

教学用MQTT工具的思考

前言 我在《智能物联网应用设计》课程中有个实验就是学习MQTT的使用,目前使用的是以下几个工具: 客户端使用MQTTX本地服务器使用的是mosquitto 云端服务器采用的巴法云协议分析软件采用的是Wireshark 这里Wireshark基本没有啥可以替代的,而…

【React】箭头函数:现代 JavaScript 的高效编程方式

文章目录 一、箭头函数的基本语法二、箭头函数的特性三、在 React 中的常见用法四、最佳实践 在现代 JavaScript 中,箭头函数(Arrow Functions)是一种简洁的函数表达方式,并且在 React 开发中非常常见。箭头函数不仅简化了函数的语…

Adobe国际认证详解-ae视频剪辑

AE视频剪辑,即After Effects视频剪辑,是数字媒体时代的一项重要技能。AE不仅提供了丰富的特效和动画功能,还让视频剪辑变得更加高效和有趣。对于想要在职场上脱颖而出、拓宽就业机遇的人来说,掌握AE视频剪辑技能无疑是一个明智的选…

添加动态云层

<template> <div class"topbox"> xx卫星管理 </div> <div class"selectbox"> <div class"title"> 卫星列表 </div> <el-table :data"tableData" style"width: 100%;height:230px;" …

基于 HTML+ECharts 实现的大数据可视化平台模板(含源码)

构建大数据可视化平台模板&#xff1a;基于 HTML 和 ECharts 的实现 大数据的可视化对于企业决策、市场分析和业务洞察至关重要。通过直观的数据展示&#xff0c;团队可以快速理解复杂的数据模式&#xff0c;发现潜在的业务机会。本文将详细介绍如何利用 HTML 和 ECharts 实现一…

配置SSH公钥互信

目录 第一台主机&#xff1a;servera&#xff08;172.25.250.101&#xff09; 第一步&#xff1a;查看 . ssh目录下面是否为空 第二步&#xff1a;输入命令ssh-keygen 第三步&#xff1a; 再看查看一下. ssh目录 第四步&#xff1a; 输入命令 ssh-copy-id root172.25.250…

KubeSphere核心实战_kubesphere全功能安装_启用kubesphere的热插拔插件---分布式云原生部署架构搭建037

然后我们开始安装kubesphere,首先进入官网点击kubernetes安装 可以看到对应的,条件说kubernetes要在1.20.x以上,我们的是 1.20.9,然后cpu硬件满足,然后,默认存储类型,上一节我们安装好了 然后就可以开始,去下载两个配置文件可以看到上面的两个配置文件 这两个文件,上面是直接…

【React】package.json 文件详解

文章目录 一、package.json 文件的基本结构二、package.json 文件的关键字段1. name 和 version2. description3. main4. scripts5. dependencies 和 devDependencies6. repository7. keywords8. author 和 license9. bugs 和 homepage 三、package.json 文件的高级配置1. 配置…