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

Java—抽象类 - 实践

目录

1、认识抽象类

2、使用抽象类的好处

​编辑3、模版方法设计模式


1、认识抽象类

在Java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类,成员方法

  • abstract修饰类,这个类就是抽象类
  • abstract修饰方法,这个方法就是抽象方法。

抽象类和抽方法的格式

修饰符 bastract  class 类名{

        //抽象方法:必须abstract修饰,只有方法签名,不能有方法体

修饰符 abstract 放回值类型 方法名称(形参列表); 

}

抽象类的注意事项

  • 抽象类中不一定要有抽象方法,有抽象方法的类必须是抽象类。
  • 类有的成员:成员变量、方法、构造器、抽象类都可以有。

抽象类最主要的特点:

  • 抽象类不能创建对象,仅仅作为一种特殊的父类,让子类继承并实现。
  • 一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

2、使用抽象类的好处

        父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写实现,我们设计这样的抽象类,就是为了更好的支持多态。

 Animal 类抽象类

public abstract class Animal {//动物的叫声,因为每个动物的叫声都不同,所以抽象方法。//好处一:简化方法体。public abstract void cry();
}

Cat类:继承了Animal抽象类重写了cry方法

public class Cat extends Animal{@Overridepublic  void cry(){System.out.println("(>^ω^<)喵喵喵喵~~~");}
}

God类:继承了Animal抽象类重写了cry方法

public class God extends Animal{@Overridepublic void cry(){System.out.println("狗汪汪汪~~~");}
}

Test类:测试类

public class Test {public static void main(String[] args) {//使用抽象类的好处Animal animal = new Cat();animal.cry();}
}
/*
输出:
(>^ω^<)喵喵喵喵~~~*/

3、模版方法设计模式

  • 提供一个方法作为完成某个类功能的模版,模版方法封装了每个实现步骤,但允许子类提供特定步骤的实现。
  • 模版方法设计模式可以:提高代码的复用,并简化子类设计

模版方法设计模式的写法步骤:

1、定义一个抽象类。

2、在里面定义2个方法

一个模版方法:把共同的实现步骤方里面去。

        一个是抽象方法:不确定的步骤,交给具体的子类来拿完成。

        下面举个例子分别用普通方法和模版方法设计模式类实现:老师和学生同写一篇作文,作文有一个模版,模版的第一段和第三段相同,写作文的时候只需要写第二段即可。

普通版本

Student 类

public class Student {public void write(){System.out.println("第一段相同");System.out.println("学生的第二段");System.out.println("第三段相同");}
}

Teacher 类

public class Teacher {public void write(){System.out.println("第一段相同");System.out.println("老师的第二段");System.out.println("第三段相同");}
}

Test 类

public class Test {public static void main(String[] args) {Student s = new Student();s.write();}
}
/*
输出:
第一段相同
学生的第二段
第三段相同*/

模版方法设计模式类实现

People 类:抽象类

public abstract class People {public void write(){System.out.println("第一段相同");wrideMain();//调用抽象方法,在子类中重写了System.out.println("第三段相同");}public abstract void wrideMain();
}

Student 类:继承了People类

public class Student extends People{@Overridepublic void wrideMain() {System.out.println("学生的第二段");}
}

Teachar类:继承了People类

public class Teacher extends People{@Overridepublic void wrideMain(){System.out.println("老师的第二段");}
}

Test类:测试类

public class Test {public static void main(String[] args) {People s = new Student();s.write();}
}
/*
输出:
第一段相同
学生的第二段
第三段相同*/

多学一招

建议使用final关键字修饰模版方法,为什么?

  • 模版方法是给子类直接使用的,不能被子类重写。
  • 一但子类重写了模版方法,模版方法就失效了。
http://www.rkmt.cn/news/57387.html

相关文章:

  • 英语_阅读_AI models_待读
  • 2025年食品厂生产用水紫外线消毒设备优质厂家权威推荐榜单:牛奶厂紫外线消毒设备/饮料杀菌紫外线消毒设备/啤酒生产紫外线消毒设备源头厂家精选
  • 2025年福建钨钢棒回收公司权威推荐榜单:福州钨钢合金回收/福建钨钢模具回收/福建钨钢块回收服务商精选
  • java.nio.charset.MalformedInputException: Input length = 1
  • hadoop与mysql的数据同步方法
  • 2025年上海黑臭水体修复服务权威推荐榜单:黑臭水体治理方案/河道水净化公司/河道治理服务商精选
  • LangGraph 官方教程:聊天机器人之三 - 实践
  • 2025年不锈钢管锯片供货厂家权威推荐榜单:切H型钢/角钢切割/切碳素钢锯片源头厂家精选
  • gzip linux
  • gz文件 linux
  • WPF 数据绑定通过 ElementName 失效后改为 Reference 正常
  • 2025年塑胶跑道面层环境测试舱直销厂家权威推荐榜单:塑胶跑道环境舱/2舱塑胶跑道环境舱/4舱塑胶跑道环境舱源头厂家精选
  • selenium: 找到页面上的指定元素并点击
  • 2025年sp防滑路面实力厂家权威推荐榜单:彩色防滑路面/陶瓷颗粒防滑路面/MMA彩色防滑路面源头厂家精选
  • CF359D-Pair of Numbers
  • 2025 最新支架厂家排行榜,出口级品质 + 定制服务 工程采购优选推荐电缆沟/弧形电缆沟/隧道电缆/管廊电力/角钢电缆/热镀锌角钢电缆沟支架厂家
  • 2025年AI IDE的深度评测与推荐:从单一功能效率转向生态壁垒 - 教程
  • vue3 波纹效果
  • gun linux
  • 2025年上海泰迪熊狗护理渠道权威推荐榜单:约克夏狗/西高地幼犬/可卡布犬用品及宠物店服务供应商精选
  • NCHU_单部电梯调度程序大作业
  • 2025-11-22
  • Grid-dp,交互
  • 2025 年国内电容源头厂家最新推荐排行榜:聚焦核心技术与品质,五大实力品牌选购指南电解电容/薄膜电容公司推荐
  • 初一上册CSP-J和期中考试反思
  • modbus(二)用NModbus4库实现Modbus tcp从站
  • 计算机字长与字节大小的发展历程
  • 2025年快递纸箱定做厂家权威推荐榜单:五层纸箱/重型纸箱/单层纸板箱源头厂家精选
  • 2025年镀锌角码实力厂家权威推荐榜单:万能立柱角码/角码连接件/钢结构预埋件源头厂家精选
  • Nmap 命令详细使用指南(官方参数全覆盖版) - 实践