Java学习之抽象类

news2024/11/25 12:46:30

目录

一、抽象类引出

二、抽象类的介绍

三、抽象类的细节

第一条

第二点

第三点

第四点

 第五点

第六点

第七点

第八点

四、练习

第一题

第二题


一、抽象类引出

父类的一些方法不能确定时,可以用abstract关键字来修饰该方法,这个方法就是抽象方法,用abstract 来修饰该类就是抽象类。

package com.hspedu.abstract_;

public class Abstract01 {
    public static void main(String[] args) {
       
    }
}
abstract class Animal{
    private String name;

    public Animal(String name) {
        this.name = name;
    }
    //这里的eat()实现了也没有什么意义
    //问题:父类方法不确定性
    //1.考虑将该方法设计为抽象方法
    //2.所谓抽象方法就是没有实现的方法
    //3.所谓没有实现就是没有方法体
    //4.当一个类中存在abstract方法时,必须将该类声明为abstract类
    //5.一般来说,抽象类会被继承,由其子类来实现抽象方法

//    public void eat(){
//        System.out.println("不知道动物吃什么~");
//    }
    public abstract void eat();

}

二、抽象类的介绍

1)用abstract 关键字来修饰一个类时,这个类就叫抽象类

访问修饰符 abstract 类名{

}
2)用abstract 关键字来修饰一个方法时,这个方法就是抽象方法

访问修饰符 abstract 返回类型 方法名(参数列表); //没有方法体

public abstract void eat();

3)抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类
4)抽象类,是考官比较爱问的知识点,在框架和设计模式使用较多

三、抽象类的细节

第一条

抽象类不能被实例化

package com.hspedu.abstract_;

public class AbstractDetail01 {
    public static void main(String[] args) {
        new A();
    }
}
abstract class A{

}

报错:'A' is abstract; cannot be instantiated

第二点

抽象类不一定要包含abstract方法。也就是说抽象类可以没有abstract方法

package com.hspedu.abstract_;

public class AbstractDetail01 {
    public static void main(String[] args) {
        
    }
}
abstract class A{
    public void hi(){
        System.out.println("hi");
    }

}

第三点

一旦类包含了abstract方法,则这个类必须声明为abstract

package com.hspedu.abstract_;

public class AbstractDetail01 {
    public static void main(String[] args) {

    }
}

class B {
    public abstract void eat();
}

报错

 需要将class B改成abstract class B

package com.hspedu.abstract_;

public class AbstractDetail01 {
    public static void main(String[] args) {

    }
}

abstract class B {
    public abstract void eat();
}

第四点

abstract 只能修饰类和方法,不能修饰属性和其它的。

package com.hspedu.abstract_;

public class AbstractDetail01 {
    public static void main(String[] args) {

    }
}

//abstract 只能修饰类和方法, 不能修饰属性和其它的
class C {
    public abstract int n1;
}

 第五点

 抽象类可以有任意成员[抽象类本质还是类],比如: 非抽象方法、构造器、静态属性等等

package com.hspedu.abstract_;

public class AbstractDetail02 {
    public static void main(String[] args) {

    }
}
//5) 抽象类可以有任意成员[抽象类本质还是类],比如: 非抽象方法、构造器、静态属性等等
abstract class A01{
    public int age;
    public static String name;

    public A01(int age) {
        this.age = age;
    }
    public void hi(){
        System.out.println("hi");
    }
    public abstract void hello();
    public static void cry(){
        System.out.println("cry");
    }
}

第六点

抽象方法不能有主体,即不能实现

第七点


如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类。

abstract class B01{
    public abstract void f1();
}
class C01 extends B01 {
    @Override
    public void f1() {
        
    }
}
abstract class B01{
    public abstract void f1();
}
abstract class C01 extends B01 {

}

第八点

抽象方法不能使用private、final 和 static来修饰,因为这些关键字都是和重写相违背的(抽象方法就是为了在子类实现重写而设计的)

 

修饰符的非法组合:“abstract”和“private”

abstract class D01{
    //静态方法可以直接用类名.方法名调用,所以必须有方法体
    //而抽象方法必须没有方法体,两者不能兼容
    //public static abstract void f2();
    
    //出现以下两种情况时,子类不能重写该方法,与抽象方法的初衷相违背
    //public final abstract void f2();
    //private abstract void f2();
    

}

四、练习

第一题

 抽象方法不能使用private、final 和 static来修饰

 

第二题

 

package com.hspedu.abstract_;

//        编写一个Employee类,声明为抽象类,包含如下三个属性:
//        name,id,salary.提供必要的构造器和抽象方法: work(。
//        对于Manager类来说,他既是员工,还具有奖金(bonus)的属性。
//        请使用继承的思想,设计CommonEmployee类和Manager类,
//        要求类中提供必要的方法进行属性访问,实现work0,提示“经理/普通员工 名字 工作中....
abstract class Employee{
    private String name;
    private String id;
    private double salary;

    public Employee(String name, String id, double salary) {
        this.name = name;
        this.id = id;
        this.salary = salary;
    }
    public abstract void work();

    public String getName() {
        return name;
    }

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}
package com.hspedu.abstract_;

public class Manager extends Employee{
    private double bonus;

    public Manager(String name, String id, double salary) {
        super(name, id, salary);
    }

    @Override
    public void work() {
        //“经理/普通员工 名字 工作中
        System.out.println("经理" + getName() + "工作中");
    }

    public double getBonus() {
        return bonus;
    }

    public void setBonus(double bonus) {
        this.bonus = bonus;
    }
}

灵活设计bonus金额,没有在构造器中初始化

package com.hspedu.abstract_;

public class CommonEmployee extends Employee{
    public CommonEmployee(String name, String id, double salary) {
        super(name, id, salary);
    }

    @Override
    public void work() {
        System.out.println("普通员工" + getName() + "工作中");
    }

}
package com.hspedu.abstract_;

public class AbstractExercise02 {
    public static void main(String[] args) {
        Manager john = new Manager("john", "20230117", 8000);
        john.setBonus(30000);
        john.work();

        CommonEmployee mary = new CommonEmployee("mary", "20130117", 6000);
        mary.work();
    }
}

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

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

相关文章

【设计模式】创建者模式·建造者模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易,如果您觉得写的不错,欢迎给博主来一波点赞、收藏~让博主更有动力吧! 一.概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 …

Python实现哈里斯鹰优化算法(HHO)优化支持向量机回归模型(SVR算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 2019年Heidari等人提出哈里斯鹰优化算法(Harris Hawk Optimization, HHO),该算法有较强的全…

目标检测——day66 Scaled-YOLOv4: Scaling Cross Stage Partial Network

Scaled-Yolov4:可伸缩跨级部分网络 Scaled-YOLOv41. Introduction2. Related work2.1. Real-time object detection2.2. Model scaling(模型缩放)3. Principles of model scaling4. Scaled-YOLOv44.1. CSP-ized YOLOv44.2. YOLOv4-tiny4.3. YOLOv4-large…

上海亚商投顾:沪指缩量小幅调整 半导体与旅游股领涨

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪沪指今日缩量小幅调整,创业板指稍显强势,多数时间红盘运行,科创50指数涨超1%。半…

springMVC讲解(上)

SpringMvc 1,简介 springmvc是spring的一个后续产品,是spring的一个子项目,是spring为表示层所开发的一整套完备的解决方案,在表示层框架经历了struct、webWork、struct2等诸多产品的历代更迭之后,目前业界普遍选择了…

JAVA就业课程,面试题大全

面试整体流程1.1 简单的自我介绍我是xxxx,工作xxx年.我先后在xxxx公司、yyyy公司工作。先后做个xxxx项目、yyyy项目。1.2 你简单介绍一下xxxx项目为了解决xxxx问题,开发了一套xxxx系统,该系统主要有那些部分组成。简单介绍项目的整体架构。参与某个模块的…

【Python学习】输入和输出

前言 往期文章 【Python学习】列表和元组 【Python学习】字典和集合 【Python学习】条件和循环 在很多时候,你会想要让你的程序与用户(可能是你自己)交互。你会从用户那里得到输入,然后打印一些结果。我们可以使用iinput和pr…

MATLAB趣味绘图-内接正六边形旋转

MATLAB趣味绘图-内接正六边形旋转 观察一下内部的正六边形大概在外部的正六边形边的四等分点的位置,通过数学平面几何知识可得边和角度的迭代关系式为: an134an−1θnθn−1arctan⁡36a_n \frac{\sqrt{13}}{4} a_{n-1} \\ \theta_n \theta_{n-1}\arcta…

金融行业数据库场景下,SmartX 超融合表现如何|性能验证与落地实践

在金融行业,数据库是一项至关重要的 IT 基础设施。作为交易和数据的主要载体,数据库往往需要在短时间内处理大量的业务数据,其可靠性、稳定性和性能将直接影响业务系统的运行状态。而在进行数据库基础架构选型时,一些客户对于超融…

C++学习笔记——类和对象

1.面向对象的三大特性:封装、继承、多态 2.对象有其属性和行为 3.具有相同性质的对象,可被抽象为类 1.封装 1.封装是C面向对象三大特性之一 2.封装的意义: (1)将属性(变量)和行为&#xff…

python学习 --- 字典基础

目录 一、什么是字典? 1、字典示意图-无序说明 2、字典实现原理 二、字典的创建 1、使用花括号 2、使用内置函数dict() 三、字典常用操作 1、字典中元素的获取 2、key的判断(存在与否) 3、字典元素的删除 4、字典元素的新增 5、获…

计讯物联智慧水务解决方案:用“智水”捍卫生命之泉

项目背景 水是生命的源泉,是城市的灵魂,是农业的命脉,是工业的基石。2022年以来,基于国家政策的引导、科技革新的驱动与供排水需求增长,智慧水务的发展突飞猛进,从信息化到数字化,再到智能化&a…

若依 ruoyi vue el-switch 列表开关状态显示有误 全部关闭的问题

后台使用int类型传状态status的值但是前端列表展示的开关状态是未开启,实际上,后台传的都是开启的状态结果应该是这样确定后台传的status值 在 el-switch 标签中是否使用了正确的值判断,比如 后台用的是字符串、布尔 或者是 数值类型&#xf…

android判断文件是否存在跳转不同activity

android studio版本:2021.2.1Patch 2例程名称:ActivityJump完成日期:2023.1.17一直在完善一个小东西,也是不断的在学习。之前做的那个桌面日历天气(老旧安卓手机发挥余热做桌面时钟摆件使用),有…

java 数列排序

试题 基础练习 数列排序提交此题 评测记录 资源限制内存限制&#xff1a;512.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s问题描述给定一个长度为n的数列&#xff0c;将这个数列按从小到大的顺序排列。1<n<200输入格式…

【渗透测试】信息搜集总结

前言零零散散的发布过很多文章了&#xff0c;但是也没有完整的总结一下&#xff0c;今天就从信息搜集入手&#xff0c;系统的总结一下。一方面可以巩固自己的基础&#xff0c;作为自己的字典随用随查&#xff0c;另一方面希望对大家的学习和工作起到帮助作用。按照这个过程基本…

求两点间的距离-C语言实现

任务描述 已知两点A(x1,y1),B(x2,y2),求其间的距离。 输入 一行四个浮点数,x1,y1,x2,y2 输出 两点间的距离,要求不要输出多余的零。 本关知识 两点间的距离公式 pow函数 在C语言中,提供了用于求x的y次幂的函数,函数原型为: double pow(double x, double y…

啊啊啊小红书爆款标题技巧被我找到了!

我通过平日里对小红书的了解和积累&#xff0c;再加上这一阵子对小红书爆款笔记的研究&#xff0c;终于在这么多笔记当中发现了小红书爆款笔记标题的撰写规律&#xff01; 我们在撰写小红书的时候恨不得篇篇都是爆文&#xff0c;那么今天就来讲一下小红书那些爆款笔记标题的撰写…

75、DiffRF: Rendering-Guided 3D Radiance Field Diffusion

简介 主页&#xff1a;https://sirwyver.github.io/DiffRF/ 对应用于三维亮度场的概率扩散过程进行去噪。在3D监控和体积渲染的指导下&#xff0c;模型能够无条件地合成高保真3D资产(左)。 蒙面补全的新应用(右)&#xff0c;即从不完整的对象中恢复形状和外观的任务(在右上方…

超实用的百度百科人物词条创建攻略分享,纯干货

自媒体时代&#xff0c;人们越来越有IP意识&#xff0c;打造个人IP就是在为自己创造更多价值。 个人IP的打造是一个提升知名度的过程&#xff0c;怎么才能快速提升&#xff1f;创建一个百度百科词条不失为一个好的选择。 现在用户有问题就会在百度上搜索一下&#xff0c;当用户…