Java学习笔记------抽象类和抽象方法

news2024/11/18 23:50:41

抽象方法

  • 抽象方法:将共性的行为(方法)抽取到父类之后,由于每一个子类执行的内容是不一样的,所以,在父类中不能确定具体的方法体,该方法就可以定义为抽象方法
  • 抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类

 抽象类和抽象方法的定义格式

  • 抽象方法的定义格式:   public abstract 返回值类型  方法名(参数列表);
  • 抽象类的定义格式:public abstract class 类名{}

 抽象类和抽象方法的注意事项

  • 抽象类不能创建对象
  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 可以有构造方法
  • 抽象类的子类要么重写抽象类中的所有抽象方法,要么是抽象类

 抽象类的构造方法的作用:当创建子类对象时,给属性进行赋值

抽象类的作用:抽取共性时,无法确定方法体,就把方法定义为抽象的。强制让子类按照某种格式重写,抽象方法所在的类必须是抽象类

package com.itheimaabstract;

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();
}
package com.itheimaabstract;

public class Frog extends Animal {

    public Frog() {
    }

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

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

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

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

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

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

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

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

public class Test {
    public static void main(String[] args) {
        Frog f=new Frog("小绿",3);
        System.out.println(f.getName() +","+f.getAge() );
        f.drink() ;
        f.eat() ;
        Dog d=new Dog("小黄",3);
        System.out.println(d.getName() +","+d.getAge());
        d.drink() ;
        d.eat() ;
        Sheep s=new Sheep("小黑",2);
        System.out.println(s.getName() +","+s.getAge());
        s.drink() ;
        s.eat() ;
    }
}

运行结果:

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

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

相关文章

d3.js 的使用

这篇文章相当于之前 svg 的补充。 因为 svg 代码肯定不是人为去专门写的。 在这里推荐制作 svg 的第三方库 - D3.js 用于定制数据可视化的JavaScript库 - D3 官网地址: D3 by Observable | The JavaScript library for bespoke data visualization 简单使用 画…

嵌入式基础知识-信息安全与加密

本篇来介绍计算机领域的信息安全以及加密相关基础知识,这些在嵌入式软件开发中也同样会用到。 1 信息安全 1.1 信息安全的基本要素 保密性:确保信息不被泄露给未授权的实体。包括最小授权原则、防暴露、信息加密、物理加密。完整性:保证数…

nginx-日志处理

access.log #正常请求的日志 error.log #访问错误日志,404,500等请求在这里 buffer:设置缓冲区,访问日志不会直接打到磁盘上,而是先积攒到缓冲区,缓冲区满了后在统一往…

H5打包APP和IOS实现免签,超级签,mam签,h5分发

博主技术笔记 博主开源微服架构前后端分离技术博客项目源码地址,欢迎各位star 微信公众号,每天给大家提供技术干货 http://yun.viphssp.top/root 打包出来的模板:https://yun.viphssp.top/mq/3/html/index.html

解决a标签内容中img标签和p标签垂直方向间隔太大的问题

现象如下: 对应的html结构: 解决办法:给a标签设置:display: inline-block和line-height属性。 然后问题解决: 具体原理如下(由chatgpt回答): display: inline-block 可以减少垂直方…

java可以跨平台的原因是什么?

因为不同平台可以安装对应的JVM(Java Virtual Machine),它是C/ C写的,JVM可以屏蔽所有和平台相关的信息,并帮助把Java文件经过编译后生成的和平台无关的class类文件(也就是字节码)从硬盘读取到内…

Java面试题(持续更新中)

一、Java基础集合多线程JVM 1.Java基础 1.1面向对象和面向过程的区别 面向过程:面向过程的性能比面向对象高。因为类调用时需要实例化,消耗比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、Li…

内存卡数据恢复软件推荐,简直是高效恢复好帮手!

“朋友们在使用内存卡时有没有好的内存卡数据恢复软件推荐呀?我的内存卡对我来说真的很重要,但是我不小心把里面的数据删除了,我应该怎么做才能恢复里面的数据呢?” 内存卡为我们的生活提供了很多的便利,我们可以在里面…

输入时并未按照格式,没注意汉字符号

🎈问题现象: 运行出来的代码没得到想要的结果: 🎈原因分析: 程序运行起来了,计算的结果是错误的,这个最好的解决办法就是调试,一步步的看代码在每个阶段的值是不是我们期望的&…

Qt学习记录___9.10

1.QtSvg初体验 #include <QtSvg> QSvgWidget w1;w1.load(QString(":/iconfont-gongyichongwu.svg"));QSvgRenderer *renderw1.renderer();qDebug()<<render->defaultSize();w1.resize(render->defaultSize());w1.show(); 2. 对话框实验。 QT之隐藏…

LNMP网站搭建

安装宝塔面板一键安装LNMP LNMP LNMP含义 L代表Linux 用来当作程序运行的系统平台 N代表Nginx 用来提供WEB网页服务 M代表Mysql 用来存储管理网站数据 P代表PHP 用来处理动态资源 LNMP搭建方法 1. yum安装依赖环境 yum -y install pcre-devel zlib-devel gcc gcc-c make安…

Cascade-MVSNet CVPR-2020 学习笔记总结 译文 深度学习三维重建

文章目录 4 Cascade-MVSNet CVPR-20204.0 主要特点4.1 背景介绍4.2 代价体构造回顾4.3 Cascade-MVSNet4.4 Loss的设置4.5 Cascade-MVSNet实战操作4.6 总结4 Cascade-MVSNet CVPR-2020 深度学习三维重建 cascade-MVSNet-CVPR-202(源码、原文、译文 )下载 4.0 主要特点 采用特…

一阶高通滤波器(博途SCL代码)

高通滤波器与低通滤波器刚好相反,允许信号的高频分量通过,可以和低通滤波器组合使用,组成带通滤波器。一阶低通滤波器相关算法介绍,可以查看下面文章链接: PLC信号处理系列之一阶低通(RC)滤波器算法_plc滤波算法程序_RXXW_Dor的博客-CSDN博客1、先看看RC滤波的优缺点 优点…

C#中的IQueryable vs IEnumerable (二)

概要 在前面的文章中&#xff0c;本人曾经分析了IQueryable和 IEnumerable两个接口的异同点。但是整个分析过程&#xff0c;侧重于基本概念层面&#xff0c;本文从设计和代码应用的角度来分析它们的区别。 现象讨论 相比于IEnumerable&#xff0c;IQueryable多了一个Express…

4.k8s部署私人仓库并且部署java服务案例

文章目录 前言一、搭建私人仓库1.1 拉取仓库镜像1.2 创建一个文件夹用来放用户名密码,然后在新创建一个账户1.3 Registry服务默认会将上传的镜像保存在容器的/var/lib/registry&#xff0c;我们将主机的/opt/registry目录挂载到该目录&#xff0c;即可实现将镜像保存到主机的/o…

多线程-锁的种类

1 作用 Java中的锁主要用于保障多并发线程情况下数据的一致性。在多线程编程中为了保障数据的一致性&#xff0c;我们通常需要在使用对象或者方法之前加锁&#xff0c;这时如果有其他线程也需要使用该对象或者该方法,则首先要获得锁,如果某个线程发现锁正在被其他线程使用,就会…

案例研究|农业信息化企业天演维真的堡垒机选型思路与落地实践

浙江天演维真网络科技股份有限公司&#xff08;以下简称为“天演维真”&#xff09;成立于2004年&#xff0c;是中国领先的乡村振兴数字化服务整体解决方案提供商。作为中国品牌农业信息化服务的先行者、中国农产品数字身份识别技术开创者&#xff0c;天演维真的产品已助力全国…

【Python】Python基础语法

总感慨万千&#xff0c;虽只道寻常 文章目录 前言1. python与Java的主要区别2. 数据类型3. 输入与输出3.1 输入3.2 输出 4. 注释5. 运算符6. 条件语句7. 循环8. 函数9. 列表9.1 创建9.2 根据下标访问元素9.3 列表切片9.4 遍历9.5 插入元素9.6 查找元素下标9.7 删除元素9.8 列表…

Spring Boot - Junit4 / Junit5 / Spring Boot / IDEA 关系梳理

文章目录 PreJunit4 / Junit5 / Spring Boot / IDEAIDEA版本Spring-Boot-Older-Release-NotesSpringBootTest 起源 & Spring-Boot-1.4-Release-Notes2.0.0.RELEASE ----- 2.0.9.RELEASE2.1.0.RELEASE ----- 2.1.18.RELEASE2.2.0.RELEASE ~ 2.2.13.RELEASE2.3.0.RELEASE ~ 2…

记一次线程堵塞(挂起)导致消息队列积压

1 背景 A服务作为生产者&#xff0c;每天发送上千万的mq消息&#xff0c;每一个消息包含500个用户ids数据。B服务作为消费者&#xff0c;接受MQ消息并通过http调用第三方请求进行业务处理&#xff0c;消费组启用了rabbitmq的多线程消费组&#xff0c;一个实例并发40个mq消费者…