三个修饰符: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() {

    }
}
package com.qfedu;

public class Dog extends Animal {

    @Override
    public void eat() {

    }

    @Override
    public void sleep() {

    }

    @Override
    public void love() {

    }
}
package com.qfedu;

public class Test {
    public static void main(String[] args) {
        Animal animal =  new Dog();
    }
}

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

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();
}
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() {
    }
}
package com.qfedu;

//只实现查询的功能,不涉及其它 add delete  update

public class A2 extends  A1 {
    @Override
    public void selectAll() {
        super.selectAll();
    }

    @Override
    public void selectByKey() {
        super.selectByKey();
    }
}

四、静态属性

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);
    }
}

五、静态方法、类加载

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;

}

6.6 对象常量

在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值