JAVA关键字abstract和final

·  阅读 170
JAVA关键字abstract和final

这是我参与更文挑战的第12天,活动详情查看: 更文挑战

abstract:

前面章节我们详细讲解了抽象类和接口,本章节我们就abstract关键字进行详细讲解,abstract(抽象)修饰符,可以修饰类和方法,修饰不同内容时分别怎么使用呢?

1.abstract修饰类:

abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法。

package cn.hz;

/**
 * @author hz
 * @version 1.0
 *定义一个抽象类:Person
 */
public abstract class Person {
    private String name;  //属性:姓名

    //非抽象方法
    public void show(){
        System.out.println("人的信息"+name);
    }
}

复制代码

注意:abstract修饰符在修饰类时必须放在类名前。

2.abstract修饰方法:

abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以";"代替。需要子类继承实现(覆盖),如抽象方法在抽象类中的使用代码如下:

package cn.hz;

/**
 * @author hz
 * @version 1.0
 *定义一个抽象类:Person
 */
public abstract class Person {
    private String name;  //属性:姓名

    //非抽象方法
    public void show(){
        System.out.println("人的信息"+name);
    }
    
    //抽象方法
    public abstract void eat();
}
复制代码

注意:在抽象类中的抽象方法的abstract是不能省略的,但是在接口中的抽象方法abstract是可以省略的。

抽象方法在接口中的使用代码如下:

package cn.hz;

/**
 * @author hz
 * @version 1.0
 *
 * 定义Person的数据访问层接口
 */
public abstract interface PersonDao {
    public abstract  Person find();
    public abstract  void add();
    public abstract  void update();
    public abstract  void delete();
}

复制代码

接口中的方法只能是抽象方法,所以我们在实际编写接口时会直接将接口处和方法处的abstract省略,代码如下:

package cn.hz;

/**
 * @author hz
 * @version 1.0
 *
 * 定义Person的数据访问层接口
 */
public  interface PersonDao {
    public  Person find();
    public  void add();
    public  void update();
    public  void delete();
}

复制代码

小结:

  • 一个类如果是抽象类,可以含有抽象方法也可以含有非抽象方法,但是如果一个类中含有抽象方法,则该类一定是抽象类。
  • 抽象方法可以位于接口和抽象类中,但是需要被非抽象子类或其实现类实现

final:

abstract为抽象的,在java中有些场合需要类,方法,变量等不允许改变,如何处理呢?java提供了关键字final用于限定内容不再改变。

1.final修饰类:

当final用于修饰一个类时,该类成为最终类,无法被继承,代码如下:

package cn.hz;

/**
 * @author hz
 * @version 1.0
 *定义一个抽象类:Person
 */
public final class Person {
    private String name;  //属性:姓名
    //非抽象方法
    public void show(){
        System.out.println("人的信息"+name);
    }
}

复制代码

该类不允许被继承,其他同普通类使用一致,在java中如String类,Integer类等类都是被final修饰的,不允许继承,大家使用时一定要注意。

2.final修饰方法:

被final修饰的方法一定是非抽象方法,该方法不允许被重写,但是该方法可以被继承

package cn.hz;

/**
 * @author hz
 * @version 1.0
 *定义一个抽象类:Person
 */
public class Person {
    private String name;  //属性:姓名
    //该方法不允许被重写
    public final void show(){
        System.out.println("人的信息"+name);
    }
}

复制代码

注意:final修饰方法和类互不影响。

3.常量:

fianl修饰一个变量时,则该变量成为常量,后续使用中不允许再做改变,并且常量需要在定义时直接赋值,代码如下:

package cn.hz;

/**
 * @author hz
 * @version 1.0
 *定义一个常量
 */
public class Person {
    public  final String NAME="无名氏";  //属性:姓名
}

复制代码

常量命名一般为全部大写,在实际开发中如圆周率PI一般定义为常量。

小结:

  • 被final修饰的类不能被继承,被final修饰的方法不能被重写,被final修饰的变量为常量不能再改变。

至此常见的关键字就说到这里!

分类:
后端
标签: