Java面向对象(OOP)--final修饰符 & abstract修饰符

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面向对象(OOP)--final修饰符 & abstract修饰符相关的知识,希望对你有一定的参考价值。

1. final修饰符


1.1 final修饰类

用final修饰的类不能被继承,没有子类。

  • 例如:我们是无法写一个类去继承String类,然后对String类型扩展的,因为API中已经被String类定义为final的了.

  • 我们也可以定义final修饰的类:


1.2 final修饰方法

用final修饰的方法可以被继承,但是不能被子类的重写。

  • 例如:每个类都是Object类的子类,继承了Object中的众多方法,在子类中可以重写toString方法、equals方法等,但是不能重写getClass方法 wait方法等,因为这些方法都是使用fianl修饰的。

  • 我们也可以定义final修饰的方法:


1.3 final修饰变量

  • 用final修饰的变量表示常量,只能被赋一次值,其实使用final修饰的变量也就成了常量了,因为值不会再变了(其实是内存地址不会变)

2. abstract修饰符

  • abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类。

2.1 抽象类和抽象方法

抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类。

语法

public abstract class Action {
    public abstract void doSomething();
}

class Test extends Action {
    @Override
    public void doSomething() {
        System.out.println("我要做点事情.");
    }
}
  • 声明类的同时,加上abstract修饰符就是抽象类
  • 声明方法的时候,加上abstract修饰符,并且去掉方法的大口号,同时结尾加上分号,该方法就是抽象方法。

2.2 特点及作用

  • 抽象类,不能使用new关键字来创建对象,它是用来让子类继承的。
  • 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的。

注:子类继承抽象类后,需要实现抽象类中没有实现的抽象方法,否则这个子类也要声明为抽象类


2.3 思考

思考1 : 抽象类不能new对象,那么抽象类中有没有构造器?

  • 抽象类是不能被实例化,抽象类的目的就是为实现多态中的共同点,抽象类的构造器会在子类实例化时调用,因此它也是用来实现多态中的共同点构造,不建议这样使用!

思考2 : 抽象类和抽象方法意义(为什么要编写抽象类、抽象方法)

  • 打个比方,要做一个游戏。如果要创建一个角色,如果反复创建类和方法会很繁琐和麻烦。建一个抽象类后。若要创建角色可直接继承抽象类中的字段和方法,而抽象类中又有抽象方法。如果一个角色有很多种 职业,每个职业又有很多技能,要是依次实例这些技能方法会显得想当笨拙。定义抽象方法,在需要时继承后重写调用,可以省去很多代码。
  • 总之抽象类和抽象方法起到一个框架作用。很方便后期的调用和重写
  • 抽象方法是为了程序的可扩展性。重写抽象方法时即可实现同名方法但又非同目的的要求。


以上是关于Java面向对象(OOP)--final修饰符 & abstract修饰符的主要内容,如果未能解决你的问题,请参考以下文章

面向对象编程(OOP)————修饰符

面向对象编程(OOP) 权限修饰符

Java Review (十面向对象----final 修饰符)

Java Review (十面向对象----final 修饰符)

java第五章:面向对象(oop)

java面向对象的注意点2