Java抽象类(基础详解)

这篇具有很好参考价值的文章主要介绍了Java抽象类(基础详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.概念

2.抽象类的使用

2.1抽象方法

2.2抽象类

2.3抽象类的使用

2.4注意事项

1.概念

普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法,普通方法,static方法,常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。

那么什么叫抽象方法呢?在所有的普通方法上面都会有一个"{}",这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指,没有方法体的方法,且抽象方法必须被abstract关键字所修饰。

拥有抽象方法体的类就被成为抽象类,抽象类必须使用abstract关键字所修饰,如果一个类包含抽象方法,所以该类必须是抽象类。注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象方法。

2.抽象类的使用

2.1抽象方法

使用abstract关键字修饰的方法就是抽象方法,值得注意的是抽象方法没有方法体,只有一个方法名。基本定义格式为:

修饰符 abstract 返回值类型 方法名(参数列表);

代码举例:

public abstract void func();

2.2抽象类

如果一个类包含抽象方法,那么该类必须是抽象类。

基本定义格式为:

abstract class 类名{
}

代码举例为:

public abstract void Test{
    public  abstract void func();
}

2.3抽象类的使用

继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象从而失去意义。

Java抽象类(基础详解)

 此时可以看到,子类没有重写父类的抽象方法时,会出现编译报错,现在我们给它重写父类抽象方法后,

Java抽象类(基础详解)

现在,代码就没有报错了。

同样的,我们再试试,未重写抽象方法时,子类能否创建对象并调用高抽象方法。

Java抽象类(基础详解)

 报错信息很明显的提示了问题。重写之后:

abstract class Animalss{
    String name = "猫咪";
    abstract void eat();
}

class Cats extends Animalss{

    @Override
    void eat() {
        System.out.println(name + "正在吃饭");
    }
}
public class Test9 {
    public static void main(String[] args) {
        Cats cats = new Cats();
        cats.eat();
    }
}

 运行结果为

Java抽象类(基础详解)

 因此,继承抽象类的子类必须重写父类所有的抽象方法!

此时的方法重写,是子类对父类抽象方法的完成实现,我们将这种方法的重写也叫做实现方法。

2.4注意事项

关于抽象类的使用,以下为语法上要注意的细节。

1.抽象类不能创建对象,如果创建,会出现编译报错,只能创建其非抽象子类的对象(如果创建了抽象类对象,调用抽象的方法,但是抽象方法没有具体的方法体,就没有意义);

2.抽象类种=中,可以有构造方法,是供子类创建对象时,初始化父类使用的(子类的构造方法中,有默认的supepr(),需要访问父类的构造方法)

Java抽象类(基础详解)

可以发现,此处编译报错,显示Employees是抽象的,不能被实例化。

我们接下来通过子类继承这个父类来试一下;

abstract class Employees{
    private String name;
    private int age;

    public Employees(String name, int age) {
        System.out.println("抽象类的构造方法已经执行!");
        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;
    }
}

class Assit extends Employees{
    private int Assit_year;

    public Assit(String name, int age, int assit_year) {
        super(name, age);
        Assit_year = assit_year;
    }

    public int getAssit_year() {
        return Assit_year;
    }

    public void setAssit_year(int assit_year) {
        Assit_year = assit_year;
    }
}
public class demo2 {
    public static void main(String[] args) {
        Assit assit = new Assit("Mary",20,5);
    }
}

代码运行结果为:

Java抽象类(基础详解) 

此时我们加上一个子类来继承这个抽象父类之后,子类的对象就能够被实例化。

3.抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类(不包含抽象方法的抽象类,目的就是不想让调用者实例化该对象,通常用于某些特殊的类的结构设计)。

4.抽象类的子类,必须重写抽象父类的所有抽象方法,否则会出现编译报错,除非该子类也是抽象类(假设不重写父类中所有的抽象方法,那么调用抽象方法会显得毫无意义) 文章来源地址https://www.toymoban.com/news/detail-458749.html

到了这里,关于Java抽象类(基础详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 全网最通俗易懂的JAVA抽象概念

    抽象类 和 抽象方法 是面向对象编程中的重要概念,用于实现抽象和继承的特性。 抽象类是 不能被实例化 的类,通常用作其他类的基类。 抽象方法是在抽象类中声明但没有具体实现的方法,需要在 子类中 实现具体的功能。 假设我们开了一个汽车玩具厂,现在要造 奔驰 和

    2024年02月11日
    浏览(43)
  • java 抽象类 详解

    目录 一、抽象类概述: 二、抽象方法 :          1.概述 :          2.应用 :          3.特点 :  三、抽象类特点 :          1.关于abstract :          2.抽象类不能被实例化,只能创建其子类对象 :          3.抽象类子类的两个选择 :  四、抽象类的成员 :       

    2024年02月06日
    浏览(32)
  • Java抽象类详解

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是来描绘对象的, 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类 。比如: 说明 1.矩形,三角形,圆形都是图形,因此和Shape类的惯性应该是继承关系

    2024年02月11日
    浏览(30)
  • Java字符串详解:概念、特点与常见的使用场景

    Java字符串是开发中经常使用到的一种数据类型,使用它可以处理文本、URL、文件路径等多种类型的数据。本文将对Java字符串的概念、特点以及常见使用场景进行详细解释。本文将分为以下几个部分: String的概念和特点 Java字符串常量池 字符串的不可变性 使用equals()方法比较

    2024年02月03日
    浏览(39)
  • 【JavaSE】Java基础语法(十六):抽象类

    当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了! 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽 象类! 抽象类和抽象方法必须使用 abstract 修饰 抽象类中不一定有抽

    2024年02月07日
    浏览(51)
  • 【Java 基础篇】Java方法引用详解

    Java方法引用是Java 8引入的一项重要特性,它提供了一种简洁、可读性高的方式来直接引用已经存在的方法。方法引用使得代码更加简洁、易懂,同时提高了代码的可维护性和重用性。本文将详细介绍Java方法引用的概念、语法和使用方法,并提供一些示例代码。 方法引用是一

    2024年02月12日
    浏览(36)
  • 【Java基础】AQS (AbstractQueuedSynchronizer) 抽象队列同步器

    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 我们继续总结学习 Java基础知识 ,温故知新。 CLH(Craig, Landin, and Hagersten locks)是一种自旋锁,能确保无饥饿性,提

    2024年02月13日
    浏览(41)
  • 【23JavaScript 正则表达式】深入解析JavaScript正则表达式:基础概念、常用方法和实例详解,轻松掌握强大的文本模式匹配工具

    正则表达式是一种强大的文本模式匹配工具,用于在字符串中搜索和操作特定的文本模式。在JavaScript中,正则表达式提供了一种灵活的方式来处理字符串操作。 在JavaScript中,可以通过使用字面量表示法或RegExp对象来创建正则表达式。 字面量表示法 RegExp对象 JavaScript中的正则

    2024年02月08日
    浏览(61)
  • Java 代理模式的基本概念、使用场景、应用示例和实现方法

    代理模式是一种常见的设计模式,在 Java 开发中被广泛应用。它允许我们通过添加一个代理对象来控制对另一个对象的访问,从而提供了一种间接访问实际对象的方法。本文将详细介绍 Java 代理模式的基本概念、使用场景、应用示例和实现方法等相关内容。 代理模式是一种结

    2024年02月05日
    浏览(57)
  • 【Java 基础】类和对象 & 方法重载详解

    《 Java 零基础入门到精通 》 专栏持续更新中。通过本专栏你将学习到 Java 从 入门 到 进阶 再到 实战 的全套完整内容,所有内容均将集中于此专栏。无论是初学者还是有经验的开发人员,都可从本专栏获益。 订阅专栏后添加我微信或者进交流群,进群可找我领取 前端/Java

    2023年04月11日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包