当前位置: 首页 > 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针对对象层次
  • 抽象类可以构造方法,目的是子类在初始化前先初始化父类
  • 子类继承抽象类,如果不想实现抽象方法,子类也要是抽象类

相关文章:

  • 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):できます 完成了等 しか。。。ない 只有
  • 南昌网站排名推广/做个网页需要多少钱?
  • 个人备案的网站做企业站/上海做网站优化
  • jsp电子商务网站建设源码/下载应用商店
  • 电脑网站建设方案/百度竞价排名案例分析
  • 漳州做网站含博大选/百度seo官网
  • aspx网站开发/销售技巧和话术