java系列:面向对象(三)

本文深入探讨Java接口的概念,包括关键字、实现、继承、函数式接口类型以及接口与抽象类的区别。同时,讲解内部类的定义、实例化、访问规则和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口

接口定义关键字:interface                                 接口实现关键字:implements

  1. 接口就是like a :“像” 我中的一种,世纪城体系之外的,用于功能扩展;
  2. 就扣规定实现类的行为(方法);
  3. 接口和接口之间是继承关系;
  4. 子类实现接口时接口里面的方法必须实现;
  5. 接口不能有构造器;
  6. 具体类可以同时实现多个接口,就是多继承现象;
  7. 一个类在继承的同时也可以实现接口:class A extends B implements C,D (C、D是接口);

接口的好处:让程序的解耦性更强,接口是一个特殊的抽象类(理解为一个抽象类,但接口不是类)

耦合:不同模块不同功能相互之间的关联度;

解耦:降低耦合度;

接口不能实例化:可以有静态常量、抽象方法、静态方法、默认方法;不能有普通方法和构造器;

抽象类和接口的区别:

1)抽象类继承于Object,接口不继承Object;

2)抽象类有构造器,接口中不能有构造器;

3)抽象类中可以有普通成员变量和常量,接口中只能有常量而且只能是public static final修饰,不写默认存在;

4)抽象类中可以有final修饰的方法,接口里面不能有;

5)抽象类只能单继承、多实现,接口是可以多继承其他接口,但是不能实现其他接口后继承其他类

函数式接口

    只有一个抽象方法的接口叫函数式接口(可以分为4个)

Function:功能型接口;predicate:断言型接口;

supplier:供给型接口;consumer:消费型接口

ps:这个不太了解,弄懂了在补;

static

    静态的,只能在类内部使用,可以修饰:属性,方法,内部类、代码块,在类加载期间初始化,存在方法区中;

  1. 静态成员随着类的加载而加载,加载与方法区中,且有优先于对象存在;
  2. 静态修饰的成员:属于类级别的成员,是全体类实例(所有对象)所共享;
  3. 使用类名访问静态变量,以及类名直接调用方法,不需要创建对象;
  4. 静态方法只能访问静态成员(属性和方法),非静态方法既可以访问静态方法也可以访问非静态;
  5. 静态方法中没有隐含参数this,因此不能访问当前对象资源,也不能定义this和super关键字,因为静态优先于对象存在;
  6. 静态代码块:随着类的加载而执行(用到类的内容才叫类加载,只有引用是不加载的)且只执行一次,优先于主函数给类初始化;

final

最终的,可以修饰:类、方法、变量(成员变量和局部变量);

  1. final修饰的类:不能继承;
  2. final修饰的方法:不能重写;
  3. final修饰的变量:只能初始化一次(赋值一次,且方法中不能有给final变量赋值的语句,因为该方法可能被调用多次),不能修改;
  4. 企业级开发中不允许使用final的方法和类;

对象的创建过程及顺序

Person p = new Person("age",23);这句话做了什么事;

  1. 因为“new” 用到了Person.class,所以会先找到Person.class文件加载到内存中;
  2. 执行该类中的static代码块(如果有的话),给Person类初始化;
  3. 在堆内存中开辟空间,分配内存地址,栈内存中开辟空间;
  4. 在堆内存中建立对象的特有属性,并进行默认初始化;
  5. 对属性进行显示初始化;
  6. 对对象进行构造代码块初始化;
  7. 对对象进行对应的构造器初始化;
  8. 将内存地址赋给栈内存中的p变量;

内部类

当描述事物时,事物的内部还有事物,该事物就是用内部类来描述。因为内部事物在使用外部事物的内容;

在类内部定义的类称为成员内部类;方法定定义的类为局部内部类,被static修饰的为静态内部类,一个类中可以有多个内部类;

1)内部类主要用于,封装一个类的声明的地步,减少类的暴露;

2)内部类的实例化:实例化是不需要写出对象,非要写的话为:new 外部类名.内部类名(),而不是外部类名.new内部类名);

3)内部类的访问规则:内部类可以直接访问外部类中的成员,包括私有;

4)当内部类定义在外部类的成员位置上,而且非私有,则在外部其他类中可以直接建立内部类对象,

格式:外部类名.内部类名 变量名 = 外部类对象.内部类对象;

注意事项

1)Java文件规则:

一个Java源文件中可以有多个类,但只能有一个共有类,其他类只能是默认类(包中类)而且Java的文件夹一定与共有类类名一致,如果没有共有类,可以和任何一个文件名一致;(一般建议一个文件一个共有类,一般不在一个文件中写多个类)

2)JVM内存结构堆、栈和方法区分别存储的内容:

JVM会在其内存空间开辟一个称为“堆”的存储空间,这部分空间用于存储使用new关键字创建的对象;

栈用于存放程序运行过程当中所有的局部变量,一个运行的Java程序从开始到结束会有多次方法的调用,JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间称为该方法的栈帧,一个栈帧对应一个正在调用中的方法,栈帧中存储了该方法的参数、局部变量等数据,当某一个方法调用完成后,其对应的栈帧将会被清除。

方法区该空间用于存放类的信息,Java程序运行时,首先会通过类装载器载入类文件的字节码信息,经过解析后将其装入方法区,类的各种信息都放在方法区保护;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值