Java核心修饰符——abstract修饰符与抽象类、抽象方法

概述

        在java中,有各种修饰符,如abstract、static、final等,今天主要总结 abstract

一. 抽象类

        1. 基本简介

                abstract是Java中的一个修饰符,表示“抽象的”,只能用来修饰类和方法,不能修饰属性。如果用来修饰类,表示该类是一个抽象类;如果用来修饰方法,表示该方法是一个抽象方法。

        2. 特别注意

               以下是不能用abstract来修饰:private私有的、static静态的、final方法和final类;

        3. 什么是抽象?

                1、抽象是一个概念,即在现实中不存在,存在于虚拟中;
                2、但是计算机可以模拟虚拟世界,创建一个抽象的类,来实现不同的操作
                3、例如:"动物"、"人"、"车" 这是一个概念,人们对于某一种东西或事物的统称,即称之为 概念,而非一个具体的实物;

        4、抽象类的作用:

                4.1、将方法抽象化,由子类扩展发挥;共同性的方法具体化,由所有子类继承。
                4.2、创建一个动物园对象,对象里面定义不同的动物;但是每个动物都有自己不同的习惯,这个时候将 这种习惯定义为一个抽象方法。父类不去实现,由子类去扩展实现,也就是让每一个动物的负责人去观察实现。但是不能new出实例化创建对象;

        5、抽象类的创建:

//抽象类
abstract class Zoo{
    //抽象方法
    public abstract string Animal(string name) ;
}

        6、抽象方法: 

                抽象方法是一种没有任何实现的方法,该方法的具体实现由子类来完成。抽象方法由abstract修饰,不能和final、static、private共同使用。如果一个类包含了若干个抽象方法,那么该类必须声明为抽象类,但抽象类中可以不包含抽象方法 

                1、抽象方法由abstract修饰,不能和final、static、private关键词共同使用;
                2、抽象方法只有方法的声明,但没有方法体;
                3、抽象方法必须存在于抽象类中;
                4、子类继承父类时,必须重写父类中所有的抽象方法,除非自己也是抽象类;

二. 抽象类的特性

        1、抽象类不能被实例化,即不能创建抽象类的对象,一般是由子类进行实例化完成相关操作,声明抽象类的目的主要是为了对该类进行扩展;
        2、抽象类中可以有N个抽象方法,也可以有N个非抽象方法,抽象方法并不是必须的;
        3、抽象类中可以没有抽象方法,但如果一个方法是抽象方法,其所在的类必须是抽象类,否则编译阶段就报错;
        4、由于抽象类不能实例化对象,所以抽象类必须被继承后才能被使用;
        5、如果一个类继承了抽象类,该类要么重写抽象类中的所有抽象方法,要么自己也抽象化;
        6、一个类不能同时被abstract和 final 修饰,因为抽象类需要被子类继承,而final类不能被继承。

三、抽象类的案例:

//抽象父类
public abstract class Zoo{
    //抽象方法
    public abstract String Animal(String name) ;
}

//子类 去扩展父类的抽象方法
public class AnimalType extends Zoo{
    public String Animal(String name) {
        String mesage = "";
        switch (name) {
            case "SZ":
                mesage = name + "爱咆哮";
                break;
            case "LH":
                mesage = name + "爱狩猎";
                break;
            case "XM":
                mesage = name + "爱睡觉";
                break;
            case "":
                mesage = "动物都不见了";
                break;
        }
        return mesage;
    }
}

//测试
public class Test4 {
    public static void main(String[] args) {
        Zoo zo = new AnimalType();
        String msg = zo.Animal("SZ");
        String msg2 = zo.Animal("LH");
        System.out.println(msg);
        //打印出: SZ爱咆哮
        System.out.println(msg2);
        //打印出: LH爱狩猎
    }
}

四. 面向抽象编程

        1、父级代码只定义规范,如Person类;

        2、具体的业务逻辑由不同的子类实现,调用者并不关心。

五、抽象总结

        1、抽象类和抽象方法都要使用abstract关键字声明;
        2、抽象类不能被实例化,不能使用 new关键字创建对象,抽象类的非抽象子类可以创建对象;
        3、抽象类中不一定包含抽象方法,但有抽象方法的类必须是抽象类;
        4、一个抽象类中可以有0~n个抽象方法,也可以有0~n个具体方法;
        5、抽象类中的抽象方法只是声明,不包含具体实现;
        6、构造方法、静态方法、final方法不能声明为抽象方法;
        7、抽象类的子类必须实现抽象方法,除非该子类也是抽象类;
        8、面向抽象编程使得调用者只须关心抽象方法的定义,而不必关心子类的具体实现

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值