jianglilili / jianglilili/guodegang.github.io
接口、继承与多态
- Dominant language
- No language data
- Stars
- 0
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
### 接口
**基本概念**:Java接口是一系列方法的声明,是一些方法特性的集合,一个接口只有方法的特性没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)
**特点**:- 就像一个类一样,一个接口也能够拥有方法和属性,但是在接口中声明的方法默认是抽象的(即只有方法标志符,而没有方法体)
**接口的语法实现**:接口中的属性默认为Public Static final 一个类实现这个接口必须实现这个接口中定义的所有的抽象方法
**为什么要用接口**:
1.接口被用来描述一种抽象
2.因为Java不像C++一样支持多继承,所以Java可以通过实现接口来弥补这个局限
3.接口被用来实现解耦
4.接口被用来实现抽象,而抽象类也可以被用来实现抽象,为什么一定要用接口呢?接口和抽象类之间又有什么区别呢?原因是抽象类内部可能包含非final的变量,但是接口中存在的变量一定是final,public,static的。
**关于接口**:我们不能直接实例化一个对象,因为接口中的方法都是抽象的,是没有方法体的,这样怎么可能产生具体的实例呢?但是,我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口的方法。因此,最后的主方法调用还可以这样写:
【接口名 接口的对象名称=new 类名()】
### 继承
**基本概念**:继承是面向对象的三大特性之一,也是实现软件复用的重要手段,Java继承具有单继承的特点,每一个子类只有一个直接父类
**声明格式**:【修饰符】 class 子类名 extends 父类名{
类体
}
修饰符:可选参数,用于指定类的访问权限,可选值为public、abstract、
final
**特点**:
1.Java的继承通过extends关键字实现
2.实现继承的类被称为子类
3.被继承的类被称为父类
**继承中的构造器**:子类不能继承父类的构造器,但子类的构造器可以调用父类的构造器
_注意:Java类虽然只能有一个直接父类,但他可以有无限多个间接父类_
**重写父类的方法**:
- 当子类覆盖了父类方法后,子类的对象将无法访问父类中被覆盖的方法.
但可以在子类方法中调用父类中被覆盖的方法.
如果需要在子类方法中调用父类中被覆盖的方法,则可以使用super(被覆盖的是实例方法)或者 父类类名(被覆盖的是类方法)来作为调用者,调用父类中被覆盖的方法
- 如果父类方法具有private访问权限,则该方法对其子类是隐藏的.
因此父类无法访问该方法,也就无法重写该方法.
如果子类中定义了一个与父类private方法具有相同的方法名/相同的形参列表/相同的返回值类型的方法,依然不是重写.
这只是在子类中重新定义了一个新的方法.
**重写和重载**
- 重载主要发生在同一个类的多个同名方法之间.
- 而重写发生在子类和父类的同名方法之间
**super限定**
- 如果需要在子类方法中调用父类被覆盖的实例方法,则可以使用super限定来调用父类中被覆盖的实例方法
**调用父类构造器**:子类不会获得父类的构造器,但子类构造器里可以调用父类构造器的初始化代码
_注意_:在一个构造器中调用另一个重载的构造器使用this调用来完成;在子类构造器中调用父类构造器使用super调用来完成
**多态**:在Java语言中,通常使用方法的重载和重写实现类的多态性
- 说明:重写之所哟具有多态性,是因为父类的方法在子类中被重写,子类和父类的方法名称相同,但完成的功能却不一样,所以说,重写也具有多态性
- 方法的的重载是指在一个类中出现多个方法名相同,但参数的个数或参数类型不同的方法
**子类转换父类的规则**
1.将一个父类的引用指向一个子类对象时,称**向上转型**,自动进行类型转换
2.此时通过父类引用变量调用的方法是子类或继承父类的方法,不是父类的方法
3.父类无法调用子类特有的数据
### 抽象类和接口的区别[详细介绍](https://blog.csdn.net/aptentity/article/details/68942916)
含有abstract修饰符的class即为**抽象类**,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
**接口**(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
**二者的相同点**
- [x] 都不能被实例化
**二者的区别**

- 抽象方法不能使用private或static关键字进行修饰
- 抽象方法只能存于抽象类或者接口中,但抽象类中却能存在非抽象方法,即有方法体的方法。接口是百分之百的抽象类
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.