当前位置: 首页 > news >正文

抽象类与抽象方法

一、抽象方法

1、定义

在类中只有声明没有具体实现的方法(只能是非静态的成员方法)(声明+实现=定义)

2、特点

在定义抽象方法必须使用abstract关键字进行修饰,否则无法(编译报错)成为抽象方法

3、作用(为什么要有抽象方法)

以动物类为例进行解释,动物类很大,在类体系结构中位于上层,里面某一方法的实现与大多数子类中方法的实现可能不一样。在这种情况下,在动物类中实现该方法的功能就没有必要了。但是必须在程序设计时,在动物类中定义好这一功能。然后让子类继承动物类,在子类中对该方法进行重写。

4、注意

(1)在定义抽象方法时不能添加static关键字,因为加了static关键字在编译时会报错(静态方法不能被修饰为抽象方法)

(2)一个类中可以定义多个抽象方法

二、抽象类

1、定义

被abstract关键字修饰的类抽象类

2、将类定义为抽象类的时机

如果一个类中没有足够的信息来描绘一个具体的对象,这个类就要被定义为抽象类,比如这个类中要定义抽象方法

3、语法

使用关键字abstract定义抽象类

【访问权限修饰符】 abstract class 类名{

       成员列表

}

4、特点

(1)抽象类不能被用于去实例化对象(无论抽象类中是否有抽象方法)

(2)抽象类的其它功能依然存在(成员变量、成员方法、构造方法

package com.ffyc.bcms.service;public abstract class Animal {private String name;private int age;public abstract void eat();// 子类中绝大多数某一方法与父类不一样时,则此方法被定义为抽象方法public void sleep(){// 子类中绝大多数某一方法与父类一样时,则此方法被定义为非抽象方法System.out.println("动物睡觉");}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;}
}

(3)如果某个类中包含有抽象方法,那么这个类就必须被定义为抽象类

(4)抽象类只能作为基类,表示的是一种继承关系

5、注意

(1)包含抽象方法的类一定是抽象类,抽象不一定包含抽象方法

(2)抽象类一般位于类结构的上层,用来定义有哪些功能,让具体的子类继承实现即可

如:在上层定义用户操作类这个抽象类,在这个类中定义增删改查四个方法,让普通用户操作类和vip用户操作类去继承这个抽象类,并实现里面的四个方法

(3)继承抽象类的非抽象类要么实现其中所有抽象方法(已实现方法的参数和返回值必须和抽象类中的方法一样),要么该类被声明为抽象类

package com.ffyc.bcms.service;public abstract class Dog extends Animal{public void lookHome(){// 定义Dog类共有的方法System.out.println("狗看家");}
}
package com.ffyc.bcms.service;public class XTQ extends Dog{@Overridepublic void eat() {System.out.println("神犬吃东西");}}
package com.ffyc.bcms.service;public class Test {public static void main(String[] args) {XTQ xtq=new XTQ();xtq.setName("旺财");xtq.setAge(18);System.out.println(xtq.getName()+":"+xtq.getAge());xtq.eat();xtq.lookHome();}
}

(4)抽象类、抽象方法,在软件开发过程中都是设计层面的概念。即设计人员会设计出抽象类、抽象方法,程序员再继承这些抽象类并覆盖抽象方法,实现具体功能。


http://www.mrgr.cn/news/3161.html

相关文章:

  • AC自动机-1
  • Linux中的exec族函数
  • C语言钥匙迷宫2.0
  • 前端css 动画过渡类型以及不同写法
  • Unity扩展 Text 彩虹文本
  • SpringBoot+OSS文件上传
  • 处理 NPU 张量构造的警告与错误的指南
  • Linux 多线程
  • 基于树莓派的智能AI网关接入豆包流程:HTTP/HTTPS、MQTT、Flask、Web可视化(代码示例)
  • 【2024国赛速成系列】建模手三天必成计划
  • 交流220V转5V100MA非隔离降压芯片应用在烧水壶上的设计与实现
  • [Linux网络】基本网络命令socket编写TCP应用层实现简易计算器
  • [Meachines] [Medium] Popcorn SQLI+Upload File+PAM权限提升
  • 测试用例、测试流程模型、测试方法详解 超详细分解
  • 一款搭载远翔FP5207芯片的大功率音箱,蓝牙音箱的组成和拆解展示
  • 零基础5分钟上手亚马逊云科技核心云架构知识 - 权限管理最佳实践
  • 使用 Python 读取 Excel 和 CSV 数据并保存到数据库
  • TensorFlow库详解:Python中的深度学习框架
  • WPF Mvvm
  • springboot启动报错