• Java抽象类和接口


    抽象类

    抽象类的概念

    在面对对象的概念中,所以的对象都是通过类来描述的,而普通的类是一个完善的功能类,可以直接实例化对象
    并且在类中可以包含常量、成员变量(属性)、成员方法、构造方法等内容

    抽象类和普通类不一样的是,抽象类当中可以包含抽象方法
    抽象方法是指没有具体实现方法的内容,同时抽象方法必须使用abstract关键字来修饰
    例如:
    抽象类的语法形式:
    一个类如果被 abstract 修饰就被称为抽象类
    抽象类中使用 abstract 修饰的方法称为抽象方法,抽象方法可以不用给出具体的实现

    // 抽象类必须使用 abstract 关键字来修饰
    abstract class A{
       
        // 抽象类也是类,里面可以包含普通方法、属性、构造方法
        int a;
        //普通的方法
        public void fun(){
       
            System.out.println("方法具体实现的内容");
        }
        
        //抽象方法  没有具体实现的内容 并且要用 abstract 来修饰
        public abstract void fun1();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    抽象类的使用限制

    1. 抽象类不能实例化对象

    例如:把上面创建的抽象类进行实例化

    public static void main(String[] args) {
       
            A a = new A();
        }
    
    • 1
    • 2
    • 3
    • 4

    结果:
    由于A是抽象类,所以不能实例化,编译器会报错
    在这里插入图片描述

    1. 抽象方法里的成员方法不能是 private

    注意:是抽象方法不能是 private(私有) 的权限
    抽象方法没有加访问限定符时,默认是public

    在这里插入图片描述

    1. 抽象方法不能被 final static 修饰,因为抽象方法要被子类重写

    在这里插入图片描述

    1. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰
    ```java
    //定义的 抽象类
    abstract class A{
       
        // 构造方法,用来显示执行的顺序
        public A(){
       
            System.out.println("正在执行A类的构造方法");
        }
        // 定义的 抽象方法
        public abstract void fun();
    }
    
    class B extends A{
       
        // 构造方法,用来显示执行的顺序
        public B(){
       
            System.out.println("正在执行B类的构造方法");
        }
        @Override
        public void fun() {
        //必须重写抽象类的方法
            System.out.println("Hello China!");
        }
    }
    
    public class Test {
       
        public static void main(String[] args) {
       
            A a = new B(); // 向上转型
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    1. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量
    2. 抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类

    练习

    使用抽象类来实现一个程序,可以实现三种不同事物的行
    三种的事物为:
    孩子:吃饭、去学校学习知识、睡觉
    父亲:吃饭、上班工作、睡觉
    母亲:吃饭、做家务、睡觉

    • 定义一个抽象类
      功能和父类差不多,是对共性的抽取
      不过抽象类可以定义抽象方法,可以不用写方法具体实现过程
    // 抽象类
    abstract class Action{
       
        // 抽象方法
        public abstract void eat();  // 吃饭
        public abstract void sleep(); // 睡觉
        public abstract void action(); //行为
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 定义 子类(孩子)
    // 定义一个孩子的类
    class Child extends Action{
       
        // 他的行为
        @Override
        public void eat() {
       
            System.out.println("孩子:吃饭!");
        }
        @Override
        public void action() {
       
            System.out.println("孩子:去学校学习知识!");
        }
        @Override
        public void sleep() {
       
            System.out.println("孩子:睡觉!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 定义 子类(父亲)
    // 定义一个 父亲 的类
    class Dod extends Action{
       
        // 他的行为
        @Override
        public void eat() {
       
            System.out.println("父亲:吃饭!");
        }
        @Override
        public void action() {
       
            System.out.println("父亲:上班工作!");
        }
        @Override
        public void sleep() {
       
            System.out.println("父亲:睡觉!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 定义 子类(母亲)
    // 定义一个 母亲 的类
    class Mom extends Action{
       
        // 他的行为
        @Override
        public void eat() {
       
            System.out.println("母亲:吃饭!"
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    Ubuntu下Anaconda安装
    简化对象和函数写法
    springcloud+nacos+gateway约会
    用Google CDC来同步Cloud SQL的数据到Bigquery
    日联科技在科创板过会:上半年营收约2亿元,宁德时代等为股东
    从私有Git仓库的搭建到命令的使用再到分支管理,全流程全套服务包您满意
    when calibrate the “gain, offset“ of the DN formula to radiance? cycle avoided?
    Taurus .Net Core 微服务开源框架:Admin 插件【2】 - 系统环境信息管理 - 【OS、Assembly】
    做一个最新版的淘宝客返利程序源码有多难?
    如何解决wmv/asf/asx格式转成mp4/avi/3gp/mpg/flv的问题
  • 原文地址:https://blog.csdn.net/m0_66483195/article/details/126616087