抽象、接口、final、权限修饰符、static

本文详细介绍了面向对象编程中的抽象类和接口的概念、定义、使用场景及注意事项,对比抽象方法与普通方法的区别,以及如何实现接口。

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

抽象(abstract)

抽象的定义:

  • 抽象方法 : 没有方法体的方法。
  • 抽象类:包含抽象方法的类。

抽象方法的作用:

提醒作用

抽象方法的格式:

修饰符 abstract 返回值类型 方法名 (参数列表);

和普通方法对比:

  1. 在返回值的前面添加abstract。
  2. 把方法体的{}换成  ;

抽象方法需要放在抽象类中。

抽象类的定义:

如果一个类包含抽象方法,那么该类必须是抽象类

抽象类的格式:

abstract class 类名字 {
 
}

对抽象的初识:

  • 因为抽象方法没有代码,即使创建出了对象也无法调用抽象方法,所以不能创建对象。
  • 抽象类就是在以前的标准类基准上增加抽象方法。
  • 抽象方法没有方法体,是无法执行的。
  • 一个抽象类继承一个抽象类,可以添加抽象方法。
  • 抽象类也可以继承普通类。

抽象类的使用步骤:

  1. 定义一个类继承抽象类。
  2. 重写抽象方法。
  3. 创建子类对象。

父类中抽象方法存在的必要性:

  1. 如果父类不写抽象方法,子类也可以不写该方法,子类就功能缺失了。(提醒作用)
  2. 如果父类添加了抽象方法,强制子类去重写这个方法,保存功能完整。

抽象总结:

  1. 抽象类不能创建对象。(无论有没有抽象方法)
  2. 抽象类中有构造方法,给抽象类的成员变量赋值。
  3. 抽象方法需要放在抽象类中,但是抽象类中可以没有抽象方法。
  4. 子类需要重写抽象类中的所有方法,如果只重写部分抽象方法,另外的抽象方法还在,需要放在抽象类中,则子类还是抽象类。

接口(interface)

回顾引用数据三种类型:

  1. 数组
  2. 接口

接口的概述:

  • 接口也是一种类型,接口主要用来放事物额外的功能。
  • 接口是功能的集合。

接口的三大注意事项:

  1. 接口中的方法默认会添加:public abstract(不写就有)。故:若在接口中,方法不加修饰符,例:void show(),则默认是抽象方法。
  2. 接口中的成员变量默认会添加:public static final。 故:接口中的成员变量不能改变,可以视为常量。
  3. 接口中没有构造方法。

接口的定义格式:

public interface 接口名称 {
    // 抽象方法
    // 默认方法(JDK1.8以后才有)
    // 静态方法(JDK1.8以后才有)
    // 私有方法(JDK1.9以后才有)
}

接口的使用:

  1. 定义类实现接口。
  2. 重写抽象方法。
  3. 创建实现类对象。

接口的实现:(implements)

  • 接口不能创建对象,只能实现(implements)
  • 类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类

非抽象子类实现接口:

  1. 必须重写接口中所有抽象方法。
  2. 继承了接口的默认方法,即可以直接调用,也可以重写。

实现的格式:

class 类名 implements 接口名 {
    // 重写接口中抽象方法(必须)
   // 重写接口中默认方法(可选)  
}

抽象方法:

上面讲抽象时已详细介绍,看上面即可。

默认方法:

概述:

使用  default 修饰,不可省略,供子类调用或者子类重写。

格式:

修饰符  default  返回值类型  方法名(参数列表){

默认方法的使用:

  1. 实现类继承了,直接拿来使用。
  2. 实现类重写默认方法。(重写时,不用加default修饰)
  • 二选一,但是只能通过实现类的对象来调用。

静态方法:

概述:

  • 使用  static 修饰,供接口直接调用。
  • 只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用。

格式:

static  返回值类型  方法名(参数列表){

使用方法:

接口名.方法名(参数);直接调用即可。

私有方法:

概述:

使用  private 修饰,供接口中的默认方法或者静态方法调用。(只能在该接口使用,实现类不能使用)

类型:

  1. 私有方法:只有默认方法可以调用。
  2. 私有静态方法:默认方法和静态方法可以调用。

格式:

private  返回值类型  方法名(参数列表){

作用与存在的意义:

如果一个接口中有多个默认方法,并且方法中有重复的内容,那么可以抽取出来,封装到私有方法中,供默认方法
去调用。从设计的角度讲,私有的方法是对默认方法和静态方法的辅助。

接口的多实现

概述:

  • java的类可以同时实现多个接口。

​​​​​​​(而java中类只能单继承,一个类只有一个父类)

实现格式:

class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
    // 重写接口中抽象方法【必须】
   // 重写接口中默认方法【不重名时可选】  
}

实现的注意事项:

  1. 多个接口中有相同的抽象方法,只需要实现一次即可。
  2. 多个接口中默认方法重名,实现类一定要重写这个方法。
  3. 接口中,存在同名的静态方法并不会冲突,原因是只能通过各自接口名访问静态方法。
  4. 若类既继承父类,又要实现接口。且父类与接口的默认方法重名,则就近原则,用父类的。

一个接口可以继承另外的多个接口:

格式:

interface  接口名  extends  接口1,接口2{

注意事项:

如果父接口中的默认方法有重名的,那么子接口需要重写一次。

java有多继承吗?

  1. 类只能单继承。
  2. 接口可以多继承。

写代码时的分析思路:

  1. 将相同的类容往父类中抽取。
  2. 将一部分人会的功能放到接口中。
  • ​​​​​​​写代码时,先写父类,再写接口。

final

final可修饰:

  1. 方法
  2. 变量

final修饰类:

  • final修饰的类不能被继承,故final修饰的类不能有子类。
  • final修饰的类,可以创建对象,且该对象的成员变量可以改变。

final修饰方法:

final修饰的方法不能被重写,但是可以直接使用。

final修饰变量:

final修饰的变量只能使用一次 = 赋值。(包括成员变量)   否则会报错。

  • final修饰的变量对象也一样,new了就不能使用等号,但是对象里面的属性是可以改变的。

final修饰成员变量有两种方式:

  1. 立刻赋值。
  2. 用构造方法赋值。

常量的命名规则:

所有字母大写,使用_连接。

权限修饰符

  • 无关类使用该类的意思是:不同类需要创建对象才能调用方法。
  • 暂时不同模块不能使用一个类(无论用什么修饰),以后会学到共享模块,再去讨论这个问题。

常用的修饰符:

  1. public:所有地方都能用。
  2. private:只有本类能用。

不常用的修饰符:

  1. protected:主要给子类使用。
  2. default(不写):主要给本包中的类使用。

编写代码时,如果没有特殊的考虑,建议这样使用权限:

  • 成员变量使用 private ,隐藏细节。
  • 构造方法使用 public ,方便创建对象。
  • 成员方法使用 public ,方便调用方法。

static(静态)

被static修饰的成员可以并且建议通过类名直接访问。虽然也可以通过对象名访问静态成员。

格式:

访问类变量:

类名.类变量名;

调用静态方法:

类名.静态方法名(参数);

static可以修饰:

  1. 成员变量。
  2. 成员方法。
  • 用static修饰的成员不会进堆中,会进入静态区(在方法区里面)。
  • 静态修饰的内容,优先于对象存在,所以可以被所有对象共享。

static修饰成员变量格式:

static 数据类型 变量名;

static修饰成员变量的好处:

  1. static修饰的成员变量在静态区保存一份,所有对象都能用,节省了内存。
  2. static是类加载到内存的时候就有了,比对象早。
  3. 可以使用类名调用。(推荐使用)

什么样的数据适合使用static修饰:

这个类共享的数据。

static修饰静态方法:

格式:

修饰符 static 返回值类型 方法名 (参数列表) {
// 执行语句     
}

静态方法调用的注意事项:

  1. 静态方法可以直接访问静态变量和静态方法。
  2. 静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问静态变量或静态方法。
  3. 静态方法中,不能使用this关键字。

间接调用:

 同一个类中,静态方法里面可以创建对象,调用该类非静态内容。

static修饰静态方法的好处:

不同类中,可以使用类名调用静态方法。

什么方法定义静态方法:

如果方法中没有使用到非静态内容,就可以考虑定义为静态方法。

静态代码块

格式:

public class ClassName {
    static {
       // 执行语句   
    }
}

位置:

类中方法外

特点:

在创建对象前自动执行一次。

  • 只会执行一次,执行时会比构造方法先运行,无论创几个对象,都只会执行总共一次。

作用:

可以给静态的成员变量赋值。

  • 数据库驱动

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值