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

java抽象类

概述     

在 Java 里,抽象类属于特殊的类,不能被实例化,主要用于为子类提供通用的属性与方法,起到模板的作用。   

类中描绘了该类所有对象共同的特性,当一个类中给出的信息足够全面时,我们就可以实例化该类;比方说,在Dog类中定义了name,age,fur_color,sex等属性,以及habit,eat等行为时,我们就可以创建一个Dog类对象,来模拟某个具体的Dog,比如你家的宠物狗等。但是,当一个类中给出的信息不够全面时,(比方说有无法确定的行为),它给出的信息不足以描绘出一个具体的对象,这时我们往往不会实例化该类,这种类就是抽象类。打个比方,对于Animal类,是,所有的动物都有吃喝的行为,定义eat方法可以描述动物“吃”这一行为,但是每种动物吃的都不一样,因此一个eat方法并不能准确描述吃什么,怎么吃。这时Animal给出的信息就不足够描述一个对象,我们就不能去实例化Animal类。

抽象类的定义

要定义抽象类,需要在类的声明前添加abstract关键字:

abstract class Animal {// 类的成员变量protected String name;// 构造方法public Animal(String name) {this.name = name;}// 普通方法public void eat() {System.out.println(name + " is eating.");}// 抽象方法public abstract void makeSound();
}

抽象方法

抽象方法指的是只有方法声明,没有方法体的方法,同样需要用abstract关键字来修饰。抽象方法要求子类必须对其进行实现。例如上面代码中的makeSound()方法就是抽象方法。如果一个方法已经确定是抽象方法,那么它绝不能再有方法体

class Dog extends Animal {public Dog(String name) {super(name);}@Overridepublic void makeSound() {System.out.println(name + " says woof!");}
}class Cat extends Animal {public Cat(String name) {super(name);}@Overridepublic void makeSound() {System.out.println(name + " says meow!");}
}public class Main {public static void main(String[] args) {Dog dog = new Dog("Buddy");dog.eat();dog.makeSound();Cat cat = new Cat("Whiskers");cat.eat();cat.makeSound();}
}

Dog和Cat类继承自Animal抽象类,并且实现了makeSound()抽象方法。在Main类的main方法里,创建了Dog和Cat的实例,调用了eat()和makeSound()方法。

抽象类的特点总结

  • 抽象类不能被实例化,但可以有构造方法,其构造方法用于子类实例化时初始化父类的成员变量。
  • 抽象类可以包含普通方法和抽象方法,而普通类不能包含抽象方法。
  • 子类继承抽象类时,必须实现抽象类中的所有抽象方法,否则子类也必须声明为抽象类。
  •     抽象方法 抽象方法的目的就是为了重写,不需要{}
  •  abstract修饰,没有函数体的方法即为抽象方法
  • 只有抽象类才能有抽象方法,非抽象类不能有抽象方法,抽象类里也可以没有抽象方法
  •  抽象类可以有具体方法
  •  abstract和private不能同时使用,private修饰的子类看不到,子类也无法重写
  • abstract和static不能同时使用,static针对类的,abstract针对对象层次
  • 抽象类可以构造方法,目的是子类在初始化前先初始化父类
  • 子类继承抽象类,如果不想实现抽象方法,子类也要是抽象类
http://www.dtcms.com/a/137813.html

相关文章:

  • GIS开发笔记(4)结合osg及osgEarth实现地图选点功能
  • Java并发-AQS框架原理解析与实现类详解
  • 有关压缩算法的学习
  • Web Components 开发与集成
  • 【AI插件开发】Notepad++ AI插件开发实践:支持多平台多模型
  • MySQL Binlog 数据恢复总结
  • 不同Linux 发行版的软件包结构差异对比
  • centos7停服yum更新kernel失败解决办法
  • windows server C# IIS部署
  • 双指针算法(一)
  • c++11 绑定器bind
  • open webui 介绍 是一个可扩展、功能丰富且用户友好的本地部署 AI 平台,支持完全离线运行。
  • Python程序结构深度解析:顺序结构与对象布尔值的底层逻辑与应用
  • 【Docker项目实战】使用Docker部署Gitblit服务器
  • Linux基于Centos7部署FTP服务器
  • chili3d调试笔记2+添加web ui按钮
  • 基于MLKit的Android人脸识别应用开发实践
  • 【C++算法】62.字符串_最长回文子串
  • pool层种类
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(4):できます 完成了等 しか。。。ない 只有
  • Day(21)--网络编程
  • 深度学习基础:从入门到理解核心概念
  • Day09【基于jieba分词和RNN实现的简单中文分词】
  • AI大模型从0到1记录学习 数据结构和算法 day19
  • 【ssti模板注入基础】
  • 如何学习嵌入式
  • 阿里云OSS
  • 回收镀锡废水的必要性(笔记)
  • jwt的无感刷新
  • 【天外之物】叉乘获得法向量