面试经典题型总结篇(三)

文章详细阐述了Java编程中抽象类与接口的概念、注意事项以及两者之间的区别,包括抽象类的不可实例化、接口的多继承特性等。同时,讨论了方法的重写和重载的规则与差异,重写涉及父类与子类的多态关系,而重载体现在同一类内的方法多样性。

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

目录

一、抽象类和接口

1.抽象类

1.1概念

1.2注意

2.接口

2.1概念

2.2注意(JDK1.8之前)

3.抽象类和接口的区别

二、重写和重载

1.重写

1.1概念

1.2重写规则

2.重载

2.1概念

2.2重载规则

3.重写和重载的区别

4.总结


一、抽象类和接口

1.抽象类

1.1概念

抽象类是抽象出了某一类事物的特性。类中没有包含足够的信息来描绘一个具体的对象,所以抽象类不能实例化,需要被子类继承。子类需要实现的部分是抽象类中的抽象方法。当然,抽象类中除了抽象方法,还可以定义其他的变量,静态代码块,静态方法,普通方法,构造方法。

子类继承抽象方法时,也可能会出现两种情况:

①子类能够将抽象方法全部实现,这个时候子类也就是一个普通的java类。

②子类没办法将抽象方法全部实现,可能只是实现了一部分抽象方法也有可能都没有实现,这个时候子类就是一个抽象类,就需要子类的子类来实现这些没有被实现的抽象方法。

③抽象类中并没有抽象方法,这种情况也是存在的,那么子类继承该抽象类时就只需要实现自己的逻辑就行。(有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法

1.2注意

①抽象类不能实例化,实例化的任务只能交给子类。唯一的办法是:父类引用指向子类对象。

(只有当抽象方法全部被实现之后才能被实例化)

②抽象类和抽象方法都使用关键字abstract来修饰。

③一个类只能继承一个抽象类。

④抽象方法只包含一个方法名,但没有方法体。方法名后面直接跟一个分号

⑤ 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

2.接口

2.1概念

接口就是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。实现接口的类,必须实现接口内所描述的所有方法,或者实现接口的类被定义为抽象类。接口中可以有变量,但必须用public static final来修饰。

2.2注意(JDK1.8之前)

①接口支持多继承,一个类可以实现多个接口。

②接口中的方法会被隐式的指定为 public abstract(只能是 public abstract)。

③接口中的所有方法都是抽象方法,都没有方法体。

3.抽象类和接口的区别

①抽象类中除了抽象方法还有静态代码块、静态方法等,但是接口中只有抽象方法和public static final修饰的变量。

②抽象类中的方法可以有方法体,但是接口中的方法没有方法体。

③一个类只能继承一个抽象类,但是一个类可以实现多个接口(一个接口可以有多个实现类)。

④子类继承抽象类使用extends,实现类实现接口使用implement。

⑤实现类实现接口必须实现全部的抽象方法,除非实现类为抽象类。子类继承抽象类必须实现所有的抽象方法,除非子类为抽象类,交给子类的子类去实现。

⑥抽象类中的权限任意,但是接口中隐式地定义变量必须为public static final ,方法必须为public abstract(不一致会被报错)。

⑦Interface关键字用来声明一个接口。

⑧接口允许多继承。

二、重写和重载

1.重写

1.1概念

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 方法名、返回类型和参数列表都不能改变。即外壳不变,核心重写!

1.2重写规则

①子类重写父类的方法,因此只有继承才能重写。

②重写的方法名称,参数列表和返回值类型原则上必须相同。(返回值类型java7 及更高版本可以不同)

③声明为 final 、static的方法不能被重写。

④构造方法不能被重写。

⑤子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法;子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。

⑥访问权限不能比父类中被重写的方法的访问权限更低。

当需要在子类中调用父类的被重写方法时,要使用 super 关键字。

2.重载

2.1概念

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。

2.2重载规则

①重载的方法必须改变参数类型或者参数个数、返回值类型可以相同也可以不同,方法名相同、访问限定符也可以改变。

②方法能够在同一个类中或者在一个子类中被重载(重载发生在一个类中)。

3.重写和重载的区别

①重写的参数列表不能改变,重载的参数列表一定要改变(参数类型或者参数个数)。

②重写发生在两个类中(父类和子类),重载发生在一个类中。

③重写的访问限定符不能有更严格的限制,重载的访问限定符很随意。

④重写的返回值类型不能改变,重载的返回值类型可以相同也可以不同。

4.总结

方法的重写和重载是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

  • (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载。
  • (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
  • (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LAKURRAA

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

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

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

打赏作者

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

抵扣说明:

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

余额充值