JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)

简介: JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)

final关键字

  • final关键字是最终的意思,可以修饰(类、方法、变量)
  • 修饰类:该类被称为最终类,特点是不能被继承了。(常见于为工具类修饰)
  • 修饰方法:该方法被称为最终方法,特点是不能被重写了。
  • 修饰变量:该变量只能被赋值一次。(用于局部变量,成员变量;其中修饰静态成员变量我们称为常量)

final修饰变量的注意事项


  1. final修饰基本类型的变量,变量存储的数据不能被改变。
  2. final修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变的。

常量

  • 使用了staticfinal修饰的成员变量就被称为常量。

作用:通常用于记录系统的配置信息。

例如:

public class Constant{
    public static final String SCHOOL_NAME = "**大学";
}

注意常量名的命名规范:建议使用大写英文单词,多个单词使用下划线连接起来。


使用常量记录系统配置信息的优势、执行原理


  • 代码可读性更好,可维护性也更好。
  • 程序编译后,常量会被“宏替换”:出现常量的地方全部会被替换成其记住的字面量,这样可以保证使用常量和直接用字面量的性能是一样的。

抽象类

认识抽象类

  • 在Java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类、成员方法。
  • abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法。
修饰符 abstract class 类名{
    修饰符 abstract 返回值类型 方法名称(形参列表);
}

例如:

public abstract class A{
    //抽象方法:必须只有方法签名,不能有方法体
    public abstract void test();
    
    /*
    public abstract void test(){
    }    这样就会报错
    */
}

抽象类的注意事项、特点

  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
  • 类该有的成员(成员变量、方法、构造器)抽象类都可以有。
  • 抽象类最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现。
  • 一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

抽象类的好处

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

例如下面的案例:

需求:某宠物游戏,需要管理猫、狗的数据。

猫的数据有:名字;

行为是:喵喵喵的叫~

狗的数据有:名字;

行为是:汪汪汪的叫~

请用面向对象编程设计该程序。


运行结果:


应用场景-模板方法设计模式

解决方法中存在重复代码的问题。

例如:


public class A{                                public class B{


       代码一样                                        代码一样


       代码不同                                        代码不同


       代码一样                                        代码一样


}                                                      }

模板方法设计模式的写法

  1. 定义一个抽象类。
  2. 在里面定义2个方法。
  • 一个是模板方法:把相同代码放里面去。
  • 一个是抽象方法:具体实现交给子类完成。

例如:

需求:

现要求老师和学生写都要写一篇题目为的《我的父亲》作文,开头和结尾都已经给定了,设计模板方法让老师和学生完成正文部分的内容。



实现:

 
public abstract class People {
    /*
    设计模板方法设计模式
    1.定义一个抽象类出来
     */
    //2.把正文的模板方法写出来
    public final void write(){
        System.out.println("\t\t\t\t\t《我的父亲》");
        //开头部分
        System.out.println("\t\t在我的世界里,有这样一个男人,他用坚定的双臂为我撑起了一个遮风避雨的天空。他是我的老师,也是我的父亲,一个普通而伟大的角色。");
        //3.定义抽象方法,让子类来完成正文内容
        System.out.println(writeMain());
        //结尾部分
        System.out.println("\t\t岁月流转,父亲的教诲如同那不灭的星光,永远照耀着我的心灵。他的身影,不仅在教室里留下了深刻的印记,在我的人生道路上也刻下了不可磨灭的痕迹。我的父亲,一位教师,一位引路人,一个永远值得我敬仰和爱戴的男人。");
    }
 
    public abstract String writeMain();
}
 
 
public class Teacher extends People{
    @Override
    public String writeMain() {
        return "作为教师,他总是以身作则,用知识的光芒照亮学生们前行的道路。在课堂上,他的每一个字、每一个动作都透露着对学生深深的爱与责任。他教会了他们如何面对困难和挑战,如何在知识的海洋中翱翔。课下的他更是孩子们的朋友,倾听他们的心声,引导他们成长。他用自己的行动诠释了一个教师父亲的形象,既是严师又是慈父。";
    }
}
 
public class Student extends People
 
 
{
    @Override
    public String writeMain() {
        return "父亲是那个总是鼓励我追求梦想的人。每当我遇到挫折,他总是耐心地听我倾诉,给予我最真诚的建议和最温暖的拥抱。在学习上,他不仅是我的榜样,更是我坚强的后盾。他教会了我坚持与努力的意义,让我明白了无论何时都不应放弃希望。在我眼中,他是最棒的父亲,也是最好的老师。";
    }
}
 
 
public class Test {
    public static void main(String[] args) {
      People p1 = new Teacher();
      People p2 = new Student();
 
      p1.write();
      p2.write();
    }
}
 

运行结果:



补充小知识:建议使用final关键字修饰模板方法。

  • 模板方法是给对象直接使用的,不能被子类重写。
  • 一旦子类重写了模板方法,模板方法就失效了。

、模板方法设计模式解决了什么问题?

1、模决方法中存在重复代码的问题。

2、模板方法设计模式应该怎么写?

  • 定义一个抽象类。
  • 在里面定义2个方法,一个是横板方法:放相同的代码里;一个是抽象方法:具体实现交给子类完成。

3、模板方法建议使用什么关键字修饰?为什么?


  • 建议使用final关键字修饰模板方法。

因为:


  • 模板方法是给对象直接使用的,不能被子类重写。
  • 一旦子类重写了模板方法,模板方法就失效了。

END



目录
相关文章
|
1月前
|
设计模式 算法 Java
模板方法--设计模式
模板方法--设计模式
21 0
|
1月前
|
设计模式 算法 Java
模板方法设计模式(TemplateMethod)
模板方法设计模式(TemplateMethod)
|
7月前
|
设计模式 算法 Java
设计模式系列教程(08) - 模板方法
设计模式系列教程(08) - 模板方法
31 0
|
10月前
|
设计模式 存储 缓存
Java中的抽象类、接口、设计模式、包装类和泛型(附带相关面试题)
一.抽象类(abstract),二.接口(interface),三.设计模式,四.包装类,五.泛型
239 0
|
1月前
|
设计模式 算法 Java
Java一分钟之-设计模式:策略模式与模板方法
【5月更文挑战第17天】本文介绍了策略模式和模板方法模式,两种行为设计模式用于处理算法变化和代码复用。策略模式封装不同算法,允许客户独立于具体策略进行选择,但需注意选择复杂度和过度设计。模板方法模式定义算法骨架,延迟部分步骤给子类实现,但过度抽象或滥用继承可能导致问题。代码示例展示了两种模式的应用。根据场景选择合适模式,以保持代码清晰和可维护。
30 1
|
5天前
|
设计模式 算法 搜索推荐
抽象类与接口:设计模式的基石
在面向对象设计中,抽象类和接口是多态和封装的核心。抽象类是不能实例化的类,提供子类共享的实现和抽象方法,确保子类间的共性。接口仅定义方法签名,强制实现类提供具体实现,促进松耦合。两者在实现方式、继承和设计目的上有所不同,常用于工厂、策略等设计模式,如策略模式中通过接口动态选择算法,增强了代码灵活性。【6月更文挑战第16天】
21 8
|
1月前
|
设计模式 算法 架构师
【搞懂设计模式】设计模式与面向对象原则
【搞懂设计模式】设计模式与面向对象原则
22 1
|
7月前
|
设计模式 SQL 数据库
淘东电商项目(61) -聚合支付(基于模板方法设计模式管理支付回调)
淘东电商项目(61) -聚合支付(基于模板方法设计模式管理支付回调)
50 0
|
1月前
|
设计模式 算法 Java
【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)
【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)
|
1月前
|
设计模式 算法
设计模式之模板方法
设计模式之模板方法

热门文章

最新文章