Java 关键字:extends, implements

用于定义类与类之间关系的关键字

extends

1、作用:
  1. 类的继承:只允许单继承
  2. 接口的继承:允许多继承
  3. 泛型定义时的类型边界
  4. 泛型使用时通配符的边界
2、类的继承:

​ 面向对象的三大特征:封装 — 通过访问限定符体现、继承、多态 。

  1. 继承的目的:代码的复用性,也就是懒得再写一遍甚至多遍重复的代码。

    继承要表达的是一组有关系的类:子类是一种特殊的父类,表示的是父类的一个子集。例如:

class Animal {
	void bark() {}
}
class Bird {}
class Cat {}

​ 上述例子中,类 Bird 和类 Cat 均为特殊的类 Animal,且均为类 Animal 的子集。

  1. 语法:

    在类的定义中体现。

class Animal {}
class Bird extends Animal {}

​ Animal:父类(parent 类)、基类(base 类)、超类(super 类)

​ Bird:子类(child 类)、派生类(derivative 类)

​ 子类允许访问父类中除了被 private 修饰的属性和方法。

Object 是所有类的一个祖先类。

3、方法的覆写和重载:

​ 发生在继承和接口中。

  1. 方法的覆写(Override):

    子类重写了父类的方法:

    1. 发生在子类上,必须实现和父类方法名称相同、形参列表相同、返回类型相同的方法。允许返回值类型是父类方法返回类型的子类,例如:List method(); 和 ArrayList method();

    2. 子类的访问限定符不能比父类的更封闭(更严格)。

    3. 目的:针对同一行为,表现出和父类不同的方式。

    4. 一般建议使用 @Override 注解进行注释。

  2. 方法的重载(Overload):

    即:方法名称相同,形参列表不同。

    方法的签名 = 方法名称 + 形参列表

4、对象模型:

可以认为:在子类的对象中,存在一个完全体的父类对象。弗雷德所有属性在子类对象中都是存在的,但可能会没有访问权限。

访问限定:子类能否访问父类的属性和方法。

  1. public、protected 可以
  2. default 在同一个包内可以
  3. private 不可以
5、名字遮挡问题:
class A {
	int a;
}
class B extends A {
	int a;
	public void method(int a) {}
}
变量名是否歧义解释
a1. 局部变量、形参 a;2. 本类或父类中的属性 a;3. 外部类中的 a。
this.a本类或父类中的属性 a。
super.a父类的属性 a。
Outter.this.a外部类的属性 a。
6、继承 VS 组合:

​ 此处和语法无关,主要指设计角度。

class 遥控器 {
	void volumeUp();
	void volumeDown();
}
class 电视 {
	遥控器 x;
	void volumeUp() {
		x.volumeUp();
	}
}
7、接口的多继承:

​ 一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用 extends 关键字,子接口继承父接口的方法。

​ 在 Java 中,类的多继承是不合法的,但接口允许多继承。

​ 在接口的多继承中 extends 关键字只需要使用一次,在其后跟着要被继承的接口。如下所示:

public interface A {}
public interface B {}
public interface C extends A {}
public interface D extends A, B {}

implements

类实现接口:允许多个

​ 当类实现接口的时候,类要实现接口中的所有方法。否则,类必须声明为抽象类。

class A [extends Parent] implements IA, IB, IC {
    // 覆写接口中的所有抽象方法 or 声明为抽象类,实现部分方法
}

重写接口中声明的方法时,注意:

  1. 类在实现接口的方法时,不能抛出强制性异常。只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
  2. 类在重写方法时,要保持一致的方法名,并且应该保持相同或者兼容的返回值类型。
  3. 如果实现接口的类时抽象类,那么就没必要实现该接口的方法。

在实现接口的时候,注意:

  1. 一个类只能继承一个类,但是可以实现多个接口。
  2. 一个接口能继承另一个接口,这和类之间的继承比较相似。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值