JavaSE 三个修饰符

三个修饰符

一、abstract

  1. 什么是抽象类:被abstract修饰的类

  2. 什么样的类应该被定义为抽象类

    1)被当成父类

    2)不会创建对象

创建子类:alt+enter实现抽象类

  1. 作用

1)可被子类继承,提供共性属性和方法

2)可声明为引用,更自然地使用多态

  1. 抽象方法?被abstract修饰的方法

ps.抽象方法没有方法体

  1. 什么样的方法要被定义为抽象方法?

    1)需要这个方法,但是难以设计方法体

    2)

     public static void teach();
  2. 原则:

1)如果一个类中存在抽象方法,这个类也应当被定义为抽象类

2)如果一个类被定义为抽象类,那么这个类的子类就要重写所有的抽象方法

如果子类没有重写所有的抽象方法,那么子类也要定义为抽象类

二、static

  1. static:静态,可以修饰属性和方法(静态属性,静态方法)

  2. 被static 修饰的成员属于类,和对象是否创建无关,被static修饰的成员是所有对象共享的——“只有一份”

  3. 如何访问静态成员:

1)类.属性 类.方法

2)对象名.属性 对象名.方法

  1. 已知的静态方法:

System.exit() Arrays.copyOf()

  1. static修饰的属性随着类的加载而存在,和是否创建对象无关

  2. 注意事项:

1)static的方法可以直接访问static的属性

2)非static的方法可以直接访问static的属性

3)static的方法不能直接访问非static的属性

如果static的方法访问非static的属性,需要先创建对象

4)静态方法中不能用super和this关键字

  1. 单例设计模式:一个类的对象只能有一个(Sun God Config)

  2. 如何实现单例设计模式?

    1)将构造方法设计为private

    2)提供一个方法获取唯一的对象

  3. 分类

    1)饿汉式

    2)懒汉式

三、final

  1. final:最终的,最后的 -- 可以修饰变量/方法/类

  2. 修饰类,则类无法继承

    修饰方法,则方法不能被重写

    修饰变量,则为常量:XXX_YYY_ZZZ

  3. 被final修饰的属性系统不会再提供默认值,必须手动初始化

  4. 修饰引用,引用的对象不能改

     public class Student{
         int x = 10;
     }
     ​
     public class MyTest{
         main{
             final Student s1 = new Student();
             s1.x = 1000;
             
             //s1 = new Student();不能new对象
         }
     }
     //s1指向 new Student(),s1不能再指向另外的对象,但是new Student()可以修改

两个代码块

  1. 动态代码块创建对象时运行

  2. 顺序:

    1)动态代码块和属性初始化的顺序由编写顺序决定

    2)属性和动态代码块的初始化先于构造方法执行

  3. 类加载:首次使用某个类时,将类相关的信息加载到内存中

    类加载时机:

  • 创建对象

  • 创建子类对象

  • 访问静态属性

  • 调用静态方法

  • 主动加载

  1. 静态代码块:

  • 静态代码块和静态属性的初始化顺序,由在类中书写的顺序决定;

  • 代码块和属性的初始化先于构造方法执行。

  • 静态属性和代码块在类加载时完成,先于实例属性和动态代码块

接口:一种规范

  1. java8之前的接口:所有方法都是抽象方法

    [修饰符] interface 接口名{

    常量

    抽象方法

    }

  2. 接口用interface关键字定义

  3. 修饰符用public

  4. 接口名遵循标识符取名规范

  5. 接口中只能包括常量和抽象方法

  • 所有属性都是常量,默认用public static final修

  • 所有方法都是抽象方法,用public abstract修饰

  • 接口可以继承其他接口

    [修饰符] interface 接口名 extends 接口1,接口2{

    常量;

    抽象方法;

    }

  1. 接口需要被实现类实现

[修饰符] class 实现类的类名 implements 接口1,接口2{}

  • 接口通过implements关键字被实现类实现,实现类可以实现多个接口

  • 如果一个实现类实现了接口就要重写/实现接口中所有的抽象方法

  • 如果没有重写/实现接口中所有的抽象方法,那么这个实现类要定义为抽象类

  1. 既有继承父类又有实现接口:先继承再实现

    [修饰符] class 类名 extends 父类名 implements 接口1,接口2{}

  2. jdk8对接口的改进

  • 新增了默认方法(default) -- 对接口实现了扩展,对旧的代码实现了兼容(新增方法时旧的实现类不会报错)

    可以通过实现类对象来调用

-- 如果默认方法不能满足类的需求,可以重写

-- 默认方法必须要有方法体

  • 新增了静态方法 -- 通过接口调用 接口名.静态方法名()

  • 如果一个接口定义了默认方法,另一个接口定义了同名同参数的抽象方法,并且实现类实现了这两个接口,就会出现接口冲突

解决:在实现类中重写发生接口冲突的方法

实现类必须覆盖接口中同名同参数的方法,来解决冲突。

内部类

  1. 匿名内部类:需要创建这个类的对象,但是只创建一次 ==> 需要创建这个类的对象,不需要单独设计这个类

    本质:接口的实现类

  2. 基于接口的多态

    如何实现:接口的引用指向实现类的对象、实现类的对象赋值给接口的引用

  3. 应用:

    1)接口作为参数

    2)接口作为方法返回值

    image-20240727114832657

    //匿名内部类

  1. 用其他包的类要导入

  2. 导入全部带*

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值