• 三个修饰符:abstract、static、final(JAVA基础五)


    一、引言

    1.1 什么是抽象

    似是而非的,像却又不是;具备某种对象的特征,但不完整。

    在这里插入图片描述

    二、abstract

    2.1 生活中的抽象

    在这里插入图片描述

    2.2 不该被创建的对象

    在这里插入图片描述

    • 程序是用来模拟现实世界、解决现实问题的;
    • 现实世界中存在的都是“动物”具体的子类对象,并不存在“动物”对象,所以,Animal不应该被独立创建成对象。

    三、抽象类、抽象方法【重点】

    3.1 抽象类

    应用:abstract修饰类,此类不能new对象。

    在这里插入图片描述

    • 被abstract修饰的类,称为抽象类。
    • 抽象类意为不够完整的类、不够具体的类,
    • 抽象类对象无法独立存在,即不能new对象。

    3.2 抽象类的作用

    在这里插入图片描述

    作用:

    • 可被子类继承,提供共性属性和方法。
    • 可声明为引用,更自然的使用多态。

    经验:

    • 抽象父类,可作为子类的组成部分。
    • 依附于子类对象存在。
    • 由父类共性+子类独有组成完整的子类对象。

    3.3 不该被实现的方法

    需求:

    • Dog中的eat()应输出“狗在吃骨头”。
    • Cat中的eat()应输出“猫在吃鱼”。

    在这里插入图片描述

    方法声明必要,方法实现多余。

    3.4 抽象方法

    在这里插入图片描述

    package com.qfedu;
    
    // abstract 抽象
    // 1. 修饰类:  不能进行new
    //    1.1 可以写普通属性和普通方法
    //    1.2 必须使用多态
    // 2. 修饰方法: 只做声明
    //    2.1 如果方法是抽象方法,那么类,必须是抽象类
    //    2.2 抽象方法必须被子类重写  @Override
    
    public abstract   class Animal {
    
        //品种
        String breed;
        //年龄
        int age;
        //性别
        String sex;
    
        //2.修饰方法,不需要方法体: 抽象方法
        public abstract void eat();
    
        public abstract void sleep();
    
        public  abstract  void love();
    
        //普通方法
        public  void  printAnimal() {
    
        }
    }
    
    • 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
    package com.qfedu;
    
    public class Dog extends Animal {
    
        @Override
        public void eat() {
    
        }
    
        @Override
        public void sleep() {
    
        }
    
        @Override
        public void love() {
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    package com.qfedu;
    
    public class Test {
        public static void main(String[] args) {
            Animal animal =  new Dog();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用技巧: 我们重写时,并不需要所有的方法进行重写!

    package com.qfedu;
    
    public abstract class A  {
    
        public  abstract  void add();
        public  abstract  void update();
        public  abstract  void delete();
        public  abstract  void selectAll();
        public  abstract  void selectByKey();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    package com.qfedu;
    
    public class A1 extends  A {
        @Override
        public void add() {
        }
    
        @Override
        public void update() {
        }
    
        @Override
        public void delete() {
        }
    
        @Override
        public void selectAll() {
        }
    
        @Override
        public void selectByKey() {
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    package com.qfedu;
    
    //只实现查询的功能,不涉及其它 add delete  update
    
    public class A2 extends  A1 {
        @Override
        public void selectAll() {
            super.selectAll();
        }
    
        @Override
        public void selectByKey() {
            super.selectByKey();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    四、静态属性

    4.1 实例属性

    在这里插入图片描述

    实例属性是每个对象各自持有的独立空间(多份),对象单方面修改,不会影响其他对象。

    4.2 静态属性

    在这里插入图片描述

    静态属性是整个类共同持有的共享空间(一份),任何对象修改,都会影响其他对象。

    4.3 什么是静态

    概念:

    • 静态(static)可以修饰属性和方法。
    • 称为静态属性(类属性)、静态方法(类方法)。
    • 静态成员是全类所有对象共享的成员。
    • 在全类中只有一份,不因创建多个对象而产生多份。
    • 不必创建对象,可直接通过类名访问。

    4.4 案例

    统计一个类的对象被创建过多少次?

    package com.qfedu.test04;
    
    //功能: 统计一个类的对象被创建过多少次?
    
    public class Test05 {
        //静态属性 : 用来计数
        static  int count =0;
    
        public Test05() {
            count++;
            System.out.println("我被创建了");
        }
    
        public static void main(String[] args) {
            Test05 t1 = new Test05();
            Test05 t2 = new Test05();
            Test05 t3 = new Test05();
            Test05 t4 = new Test05();
            System.out.println(Test05.count);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    五、静态方法、类加载

    5.1 静态方法

    在这里插入图片描述

    5.2 静态的特点

    • 静态方法允许直接访问静态成员。
    • 静态方法不能直接访问非静态成员。
    • 静态方法中不允许使用this或是super关键字。
    • 静态方法可以继承,不能重写、没有多态。

    5.3 动态代码块

    在这里插入图片描述

    运行结果:

    ​ 实例属性
    ​ 动态代码块
    ​ 构造方法

    5.4 静态代码块

    在这里插入图片描述

    运行结果:

    ​ 静态属性

    注:方法只有被调用才会执行。

    六、final

    6.1 什么是最终

    概念:最后的,不可更改的。

    final可修饰的内容:

    • 类(最终类)
    • 方法(最终方法)
    • 变量(最终变量)

    6.2 final类

    • final修饰类:此类不能被继承。
      • String、Math、System均为final修饰的类,不能被继承。
    • final修饰方法:此方法不能被覆盖。
      • 意为最终方法,不支持子类以覆盖的形式修改。

    6.3 final变量

    final修饰变量:此变量值不能被改变(常量)。

    在这里插入图片描述

    所有final修饰的变量只能赋值一次,值不允许改变。

    6.4 实例常量

    在这里插入图片描述

    • 实例常量不再提供默认值,必须手动赋予初始值。
    • 赋值时机:显示初始化、动态代码块、构造方法。
    • 注意:如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值。

    6.5 静态常量

    在这里插入图片描述

    • 静态常量不再提供默认值,必须手动赋予初始值。
    • 赋值时机:显示初始化、静态代码块。
    package com.qfedu.finalTest;
    
    public class Test3 {
        // 如果 定义的是常量  常量名一般用 大写和_
        //定义窗口出现的x y
        public  static  final  int X = 100;
        public  static  final  int Y = 100;
    
        //窗口的大小
        public  static   final  int WID_WIDTH = 400;
        public  static   final  int WID_HEIGTH = 500;
    
        //操作游戏的方向
        public  static  final  int  KING_LEFT  = 1;
        public  static  final  int  KING_UP = 2;
        public  static  final  int KING_RITHT = 3;
        public  static  final  int KING_DOWN = 4;
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    6.6 对象常量

    在这里插入图片描述

  • 相关阅读:
    day44 类和对象
    LeetCode28:实现 strStr()之KMP算法
    心电贴技术方案芯片LH001-91
    Linux设备树详解
    C++库Eigen中拟合线性方程(最小二乘法)
    物联网感知-张力电子围栏及解决方案
    金九银十招聘季, APP测试面试题助你拿高薪Offer
    Cholesterol-PEG-Thiol,CLS-PEG-SH,胆固醇聚乙二醇巯基试剂供应
    22 相交链表
    动态数组【python】
  • 原文地址:https://blog.csdn.net/LCHONSEONE/article/details/127639825