java之抽象类以及如何优化

news2025/1/16 19:06:48
抽象类的作用是什么:
当我们抽取共性时候,无法确定方法体,就把方法定义为抽象的,强制让子类按照某种格式重写,抽象方法所在的类,必须是抽象类.

我们先定义一个抽象类 ,abstract的意思就是抽象类, 一般来说,在抽象类里面定义的方法也是抽象方法.
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 abstract void eat();
    public  void drink(){
        System.out.println("喝水");
    };
}

像这个抽象方法,我们并没有写出方法体,也就是在别的子类继承的时候,我们要在子类里面重新写出方法然后覆盖了掉这个方法.

public class Dog extends  Animal{
    //在子类当中,对抽象方法进行重写
    @Override
    public void eat() {
        System.out.println("狗在吃骨头");
    }

}

比如这个类里面,假设我们不定义这个类为抽象类,那么我们在继承了父类的Animal的时候, 我们想要调用父类的方法的时候,那么必须要把方法重新写并且覆盖了.

public class Frog extends Animal{

    //在子类当中,对抽象方法进行重写
    @Override
    public void eat() {
        System.out.println("青蛙吃虫子");
    }
}
public class Sheep extends Animal{
    //在子类当中,对抽象方法进行重写
    @Override
    public void eat() {
        System.out.println("羊在吃草");
    }
}

在这里  我定义了三个类,并且对这三个类的方法重新写 并且覆盖了原来父类的方法.

然后我们在进行测试:

public abstract class Test extends Animal {
    //main函数的主入口
    public static void main(String[] args) {
        //创建对象
        Dog dog = new Dog();
        dog.setName("小花");
        dog.setAge(18);
        System.out.println(dog.getName()+" "+dog.getAge());
        dog.eat();
        dog.drink();



        Frog frog = new Frog();
        frog.setName("小菜");
        frog.setAge(10);
        System.out.println(frog.getName()+" "+frog.getAge());
        frog.eat();
        frog.drink();


        Sheep sheep = new Sheep();
        sheep.setName("小绵");
        sheep.setAge(5);
        System.out.println(sheep.getName()+" "+sheep.getAge());
        sheep.eat();
        sheep.drink();


    }

}

在这里我们创建了三个对象,以第一个为例,我们在创建对象的时候,用setname这个函数传参数到这个对象里面.然后再打印输出,最后结果如下:

我们在测试类的时候,我们用setname传参的时候,感觉代码有点多, 那我们应该如何优化呢?

很简单,我们在Dog这个类当中按住快捷键的AIT+insert里面的constructor然后添加空参和实际参数:

然后我们在test的dog对象里面直接进行传参 这样就省下了俩行代码:

public abstract class Test extends Animal {
    //main函数的主入口
    public static void main(String[] args) {
        //创建对象
        Dog dog = new Dog("小花",1);
        System.out.println(dog.getName()+" "+dog.getAge());
        dog.eat();
        dog.drink();



        Frog frog = new Frog("小菜",2);
        System.out.println(frog.getName()+" "+frog.getAge());
        frog.eat();
        frog.drink();


        Sheep sheep = new Sheep("小绵",5);
        System.out.println(sheep.getName()+" "+sheep.getAge());
        sheep.eat();
        sheep.drink();
    }
}

这样一来一去就省下了六行代码了,减少了内存空间的使用.

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

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

相关文章

【Linux操作系统】关于系统中内存文件与进程的关系以及文件描述符fd、重定向的理解

目录 一、关于文件和进程关系的简介二、了解文件操作的系统接口和C语言文件操作接口1.C语言文件操作接口2.文件操作的系统接口 三、关于C语言接口和系统接口的关系四、文件描述符(fd)1.FILE* 结构体2.文件描述符表(fd的本质)3.文件…

透明显示屏方案介绍

透明显示屏方案是一种创新的显示技术解决方案,它结合了透明材料和高性能显示技术,实现了在显示内容的同时保持屏幕背后物体或场景的可见性。以下是对透明显示屏方案的详细介绍: 一、技术原理 透明显示屏方案主要采用了LED透明屏和OLED透明屏两…

基于PHP+MySQL组合开发的微信活动投票小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 在当今数字化时代,微信作为社交媒体的巨头,为企业和个人提供了丰富的互动营销平台。其中,投票活动作为一种有效的用户参与和互动方式,被广泛应用于各种场景。为了满足这一需求,我们推出了一款基于PHPMySQL组…

zabbix“专家坐诊”第249期问答

问题一 Q:zabbix server服务每次重启监控主机就会触发大量的“10分钟未获取到数据”的告警,同时还会触发zabbix的history进程繁忙的告警。(后面检查实际上监控主机在告警时间段内是有数据的)感觉是server一重启,数据库…

Python | ValueError: invalid literal for int() with base 10: ‘example’

Python | ValueError: invalid literal for int() with base 10: ‘example’ 在Python编程中,遇到ValueError: invalid literal for int() with base 10: example这样的错误通常意味着你试图将一个字符串转换为整数,但该字符串包含非数字字符。这种错误…

美团 AIGC产品经理面经(已拿 offer)

背景:211本科毕业,毕业之后在北京一家中型电商公司做了3年商家后台产品经理,目前通过老薛的朋友关系拿到了美团的offer。 目前还有几家在面试流程中,继续加油💪 美团AIGC产品面经-业务面 💥1、自我介绍&a…

找不到vcruntime140_1.dll,无法执行此代码

电脑运行某些软件提示:由于找不到vcruntime140_1.dll,无法继续执行代码 解决方法 1、下载这个软件 https://download.csdn.net/download/szdenny/89605688 2、 通过这个网址下载软件修复:http://xn--dll-8n0e103b00dgy4e.site/

前端:Vue学习 - 智慧商城项目

前端:Vue学习 - 智慧商城项目 1. vue组件库 > vant-ui2. postcss插件 > vw 适配3. 路由配置4. 登录页面静态布局4.1 封装axios实例访问验证码接口4.2 vant 组件 > 轻提示4.3 短信验证倒计时4.4 登录功能4.5 响应拦截器 > 统一处理错误4.6 登录权证信息存…

ArcGIS导出的shp不带prj文件怎么办?

0序 遇到了好多个做测绘的朋友,拿到的shp文件都没有prj文件,在图新地球当中无法加载。 而prj文件是其他软件解析shp,和地图做叠加的核心。否则就不知道shp要素的坐标按照什么坐标去解析。 经过排查发现,大部分是在arcgis中导出sh…

数据同步策略概览

数据同步在业务开发中比较普遍,例如 订阅MySQL的binlog将数据同步至异构数据库。数据同步方案需要考虑一下几点: 数据实时性要求数据量级是否有数据转换逻辑 可分为两种模式 发布订阅模式:分为订阅数据库log还是订阅应用层发的消息点对点模…

适合印刷企业使用的MES管理系统具备哪些特点

在当今竞争激烈的印刷行业中,提高生产效率、优化资源配置、确保产品质量与交期已成为企业生存与发展的关键。为此,引入一套高效、智能的印刷企业MES管理系统显得尤为重要。MES管理系统作为连接企业资源计划ERP系统与车间生产现场的桥梁,其设计…

Linux下的nc命令:网络工具的瑞士军刀

在 Linux 系统中,有许多强大的网络工具可用于网络连接、数据传输和端口扫描。其中一个非常强大的工具是 nc,也称为 Netcat,被称为网络工具的瑞士军刀,因为它可以执行各种网络任务。本文将深入探讨 nc 命令的使用方法,提…

第127天:内网安全-隧道搭建穿透上线FRPNPSSPPNgrokEW 项目

目录 案例一:内网穿透-Ngrok-入门-上线 案例二:内网穿透-Frp-简易型-上线 案例三: 内网穿透-Nps-自定义-上线 案例四:内网穿透-Spp-特殊协议-上线 案例一:内网穿透-Ngrok-入门-上线 这里我是用了一台云服务器&…

zy青岛实训day19 8/1

接着昨天的 npm run serve 构建项目 npm run build ls ls dist/ vim dist/index.html [rootweb eleme_web]# cd /usr/local/nginx/conf/ [rootweb conf]# ls 将静态的项目移动到nginx中 [rootweb nginx]# cd conf.d/ [rootweb conf.d]# ls qd.conf [rootweb conf.…

信息学奥赛初赛天天练-52-CSP-J2019基础题3-抽屉原理、鸽巢原理、乘法原理、二叉树遍历、前序遍历、中序遍历、后序遍历

PDF文档公众号回复关键字:20240801 2019 CSP-J 基础题3 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 11 新学期开学了,小胖想减肥,健身教练给小胖制定了两个训练方案。 …

个人的知识点小分享

type查看命令类型(内建命令/外部命令) [rootlocalhost ~]# type cd cd is a shell builtin [rootlocalhost ~]# type ls ls is aliased to ls --colorauto Ps 命令 --help 查看命令的常见选项 info 命令 #比man更详细的帮助命令。 回车…

arduino程序-MC猜数字1(基础知识)

arduino程序-MC猜数字1(基础知识) 1-18 MC猜数字0-介绍1-19 MC猜数字1-电路搭建电路图所需元件10根杜邦线(公对公)10根左右面包板跳线数码管按键电阻1个(200~500欧姆)面包板Arduino UNO R3*1 搭建电路相关程…

实验2-4-4 求简单交错序列前N项和

//实验2-4-4 求简单交错序列前N项和//计算序列 1 - 1/4 1/7 - 1/10 ... 的前N项之和。 #include<stdio.h> #include<math.h> int main(){int n;scanf("%d",&n);//输入在一行中给出一个正整数N。double sum0;for(int i1;i<n*3;i3){//i3>题目…

maven项目容器化运行之4-子模块利用Jenkins和maven使用docker插件调用远程docker构建服务

一.背景 之前期望把开发和部署分开&#xff0c;在上篇文章maven项目容器化运行之3-优雅的利用Jenkins和maven使用docker插件调用远程docker构建服务并在1Panel中运行-CSDN博客已经实现了。主要思路是开发配置了pom文件&#xff0c;但是不管docker镜像打包。提交代码库后&#x…

马丁短链03用户信息脱敏

为什么后端脱敏&#xff1a; 因为如果给前端做&#xff0c;请求返回数据之后未脱敏&#xff0c;只在网页显示上脱敏&#xff0c;攻击者可以做一些简单请求直接看到返回信息&#xff0c;只能防一些小白。所以要在服务器这里做。 复杂的方法&#xff1a; 在controller层设置自定…