Java抽象类/抽象方法定义及其特性详解

article/2025/10/16 17:51:14

       类的继承结构中,越往上的类越具有通用性,也就越抽象。当它抽象到一定程度,就变成概念成框架,不能再产生实例化的对象了。例如“交通工具”,就无法用它来产生一个实例。
       对应这一现象,Java中提供了抽象类,它只能作为父类,不能实例化。定义抽象类的作用是将一类对象的共同特点抽象出来,成为代表该类共同特性的抽象概念,其后在描述某一具体对象时,只要添加与其他子类对象的不同之处,而不需要重复类的共同特性。这样就使得程序概念层次分明,开发更高效。与抽象类紧密相连的是抽象方法一它总是用在抽象类或接口中。

一、抽象类的定义

被关键字“abstract”修饰的类,为抽象类。(而且,abstract只能修饰类和方法)

abstract class className{类体;
}

在抽象类中,可以有0个或者多个抽象方法,也可以有普通的实例方法和静态方法,还可以有其他的成员变量和构造方法。如果类中没有任何形式的抽象方法,那么可以由程序员决定是否将类声明成abstract类型,但是只要是下面这些情况之一,那类必定为抽象类,必须加上abstract修饰。

  • 类中明确声明有abstract方法的。
  • 类是抽象类继承下来的,而且没有实现父类中全部的抽象方法。
  • 类实现了一个接口,但没有将其中所有的抽象方法实现。

抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口。(这点要铭记,有些文章说含有抽象方法的类就是抽象类,这个是不准确的)


那么什么是抽象方法呢?

二、抽象方法的声明

抽象方法:使用abstract关键字定义的方法,抽象方法没有具体的方法体;抽象类必须也要用abstract关键字定义。

抽象方法是一种只有方法声明面没有方法体定义的特殊方法。它的声明部分和一般方法并
没有太大的区别,也有访问权限、返回值类型等,只是需要在前面加上一个关键字“abstract”。通常的形式如下
abstract 访问权限 返回类型 方法名 ([参数列表]);
特持别注意它的最后有一个分号“;”,而没有方法体的括号“{ }”。
例如下面就是一个合法的抽象方法。
abstract protected void eat();
而下面这个,虽然方法体为空,但它不是一个合法的抽象方法。
abstract protected void eat() { }

声明抽象方法时有以下几个限制,具体原理文章后面会讲到

  • 构造方法不能声明为 abstract
  • 静态方法不能声明为 abstract
  • privale方法不能声明为 abstraet
  • final方法不能声明为 abstract
  • 抽象方法只能出现在抽象类或接口中

三、抽象类的特点

1.抽象类和抽象方法必须用abstract关键字修饰

abstract class 类名 {}
public abstract void 方法名();

2.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口(这点上面讲过,是个易错点)

3.抽象类不能实例化,那么抽象类如何实例化
抽象类如果可以实例化的话,那么就可以调用类中的抽象方法,很明显调用抽象方法是没有意义的,所以抽象类不能实例化,如何非要实例化,那就按照多态的方式,由具体的子类实例化。(其实这也是多态的一种,抽象类多态,不能算抽象类实例化

public class Demo1_Abstract {public static void main(String[] args) {//Animal a = new Animal();			//错误: Animal是抽象的; 无法实例化Animal a = new Cat();				//父类引用指向子类对象a.eat();}
}abstract class Animal {						//抽象类public abstract void eat();				//抽象方法
}class Cat extends Animal {public void eat() {System.out.println("猫吃鱼");}
}

运行结果:
在这里插入图片描述

4.抽象类的子类

 要么是抽象类要么重写抽象类中的所有抽象方法

补充说明
在这里插入图片描述

四、抽象类的成员特点

抽象类的成员特点:

  1. 成员变量:既可以是变量,也可以是常量。(abstract是否可以修饰成员变量?不能修饰成员变量)
  2. 构造方法:有,用于子类访问父类数据的初始化。
  3. 成员方法:既可以是抽象的,也可以是非抽象的。
abstract class Demo {int num1 = 10;         //定义了变量final int num2 = 20;   //定义了常量public Demo(){}		   //构造方法public void print() {System.out.println("hello");}public abstract void method();    //既有非抽象方法又有抽象方法
}class Test extends Demo {public void method() {System.out.println("world");}
}

抽象类的成员方法特性:

  • 抽象方法:强制要求子类做的事情。
  • 非抽象方法:子类继承的事情,提高代码复用性。

五、抽象类的一些问题解答

1、一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
可以,这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成

2.构造方法为什么不能声明为 abstract?
构造方法不能被继承,一个抽象的构造方法将永远不会被实现,所以它也不能声明为abstract的。

3.abstract不能和哪些关键字共存?

1.abstractstaticabstract修饰的方法没有方法体被static修饰的可以用类名.调用,但是类名.调用抽象方法是没有意义的
2.abstractfinalabstract修饰的方法强制子类重写被final修饰的不让子类重写,所以他俩是矛盾
3.abstractprivateabstract修饰的是为了让子类看到并强制重写被private修饰不让子类访问,所以他俩是矛盾的

测试如下

abstract class Demo {//public static abstract void print();	//错误: 非法的修饰符组合: abstract和static//public final abstract void print();	//错误: 非法的修饰符组合: abstract和finalprivate abstract void print();			//错误: 非法的修饰符组合: abstract和private
}

http://chatgpt.dhexx.cn/article/YaXakChL.shtml

相关文章

Java的抽象类和抽象方法

目录 1、抽象类 2、抽象方法: 3、 抽象类和抽象方法的使用 1、抽象类 当父类的方法不能确定时,可以用abstract关键字来修饰方法,这个方法时抽象方法,用abstract来修饰该类就是抽象类。 public abstract class Animal {public…

抽象类必须要有抽象方法吗?

答案是:不必须。 这个题目主要是考察对抽象类的理解。 说一下我个人的理解吧。 1.如果一个类使用了abstract关键字修饰,那么这个类就是一个抽象类。 2.抽象类可以没有抽象方法 3.一个类如果包含抽象方法,那么这个类必须是抽象类&#xf…

抽象类和抽象方法定义及讲解?

首先说抽象类: (1)抽象类只能作为其他类的基类,它不能直接实例化,对抽象类不能使用new 操作符。 (2)抽象类中可以包含抽象成员,但非抽象类中不可以。 (3)如…

抽象类是不是必须要有抽象方法

在回答这个问题之前,先来了解一下抽象类。 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的…

Java中的抽象方法

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 抽象类除了不能实例化对象之外&#xf…

抽象方法(abstract);

抽象方法(abstract); 首先这个名字看着就很抽象。 首先java中普通的方法由方法的声明,方法体,(大括号里面的)组成 修饰符,返回值而,方法名称,(参…

抽象类+抽象方法

一、概念 1、抽象类:(用abstract修饰) Java中可以定义没有方法体的方法,该方法由子类来具体实现。该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类。 2、抽象方法 (用abstract修…

Java中的抽象方法是什么,怎么用?

抽象方法… 听着就很抽象的样子 脑中不禁浮现出了各种抽象画的图像 缩在被窝里打起了退堂鼓 但是! Java中的抽象没那么难 抽象方法是个啥? 通俗来说 就是不知道该咋做的方法 先别晕 我给你举个小栗子 我们创建一个类,什么类呢?…

抽象类和抽象方法(Java)

抽象类和抽象方法(Java) 文章目录 抽象类和抽象方法(Java)介绍定义格式注意事项练习 介绍 抽象方法:将共性的行为(方法)抽取到父类之后,由于每一个子类执行的内容是不一样&#xff…

什么是抽象方法

前言:在读这篇文章的同学大概率是一位初学者,这一阶段应该是javase最困难的时候(多态性以及面向接口编程),也是最重要的时候。提前祝大家把这该死的java学完!!!(本文不会…

python 凸优化

定义函数,存在多个局部极小值,建议在局部优化之前进行全局优化,缩小范围 def fm(p):x, y preturn (np.sin(x) 0.05 * x ** 2 np.sin(y) 0.05 * y ** 2) x np.linspace(-10, 10, 50) y np.linspace(-10, 10, 50) X, Y np.meshgrid(x, y…

凸优化概述

目录 凸优化概述 1 概述 2 凸集 3 凸方法 3.1 凸性的一阶条件 3.2 凸性的二阶条件 3.3 詹森不等式 3.4 分段集 4 凸优化问题 凸优化概述 1 概述 也就是说,给定一个函数,我们想找到使最小化(或最大化)。目前已有的方法包含:最小二乘…

凸优化入门

主要的目录 1-2:推荐书目,引言,常见例子,优化问题分类,发展史 3-4:仿射/凸/凸锥 集/组合/包 5-6:几种重要的凸集:超平面与半空间/球和椭球/多面体/单纯形/对称(半)(正定)矩阵 7-8:…

凸优化系列——最优化问题

1. 凸优化问题介绍 凸优化问题如下: 为什么要求不等式约束是线性函数呢?我们知道凸函数的下水平集是凸集。 为什么要求等式约束是线性的呢?线性函数表示一个超平面,他也是凸集 也就是说,对于凸优化问题,…

凸优化 (中科大

凸优化是优化中比较容易的一种 优化optimization,即数学规划。 优化规划 优化:(包含三个要素)可行解的集合、定义最优、找出 任何一个优化问题,总可以写成这样的形式: minimize 函数 ,最…

凸优化学习

”凸优化“ 是指一种比较特殊的优化,是指求取最小值的目标函数为凸函数的一类优化问题。凸优化就是:1、在最小化(最大化)的要求下,2、目标函数是一个凸函数(凹函数),3、同时约束条件…

理解凸优化

导言 凸优化(convex optimization)是最优化问题中非常重要的一类,也是被研究的很透彻的一类。对于机器学 习来说,如果要优化的问题被证明是凸优化问题,则说明此问题可以被比较好的解决。在本文中,SIGAI将为…

优化算法——凸优化的概述

一、引言 在机器学习问题中,很多的算法归根到底就是在求解一个优化问题,然而我们的现实生活中也存在着很多的优化问题,例如道路上最优路径的选择,商品买卖中的最大利润的获取这些都是最优化的典型例子,前面也陆续地有一…

凸优化基础知识

目录 一、计算几何是研究什么的? 二、计算几何理论中(或凸集中)过两点的一条直线的表达式,是如何描述的?与初中数学中那些直线方程有什么差异?有什么好处?(按自己的体会) 1、凸集中 2、初中…

优化问题---凸优化基本概念

目录 1.凸优化到底是什么? 1.1 基本概念 1.2 凸优化和非凸优化 2、集合概念 2.1 仿射集、仿射包、仿射组合 2.2 凸集、凸包、凸组合 2.3 锥、凸锥 3.凸函数与非凸函数 4.总结 1.凸优化到底是什么? 1.1 基本概念 凸优化就是优化问题的一个特例…