Java一(面向对象)

1.2.1 抽象

将一类‘对象’的共同特征总结出来构造成‘类’的过程。

包括数据抽象和行为抽象,只关注对象有哪些属性和行为,不关注实现的细节。

1.2.2 封装

将数据和封装数据的方法进行有机结合,隐藏对象的属性和实现的细节,仅对外公开接口来和对象进行交互。

  • 减少耦合、提高代码可重用性。

  • 包:用于管理一系列的类的一个软件包,实际上是一个文件夹。 防止出现定义相同名称的类造成冲突。

  • 访问修饰符

修饰符本类同包中的类子类其他类
public可访问可访问可访问可访问
protected可访问可访问可访问
默认可访问可访问
private可访问

1.2.3 继承

  • 子类继承父类的属性和方法,子类可直接访问非私有的属性和方法。

  • 继承可以提高代码的复用性,减少冗余代码,并使得类和类之间产生一定的关系。

  • 但一定程度的破坏了封装性,子类依赖了父类的实现,缺乏独立性。

1.2.4 多态

  • 编译时多态: 方法的重载

  • 运行时多态:3个条件,1有子类的继承、2子类重写父类的方法,3父类引用指向子类对象。 接口同样适用。

1.2.5 重载和重写

重载: 发生在同一类中, 同名且不同参数列表的方法 发生重载。

重写: 发生在子类,或实现接口的类中,子类重新实现父类已有的方法,同名同参同返回值, 且不能抛出更多更大的异常(里氏替换原则:子类可以扩展父类的功能,但是不能改变父类原有的功能)。

  • 子类方法的访问权限必须大于等于父类方法;
  • 子类方法的返回类型必须是父类方法返回类型或为其子类型。

使用 @Override 注解,可以让编译器帮忙检查是否满足上面的两个限制条件。

1.2.6 抽象类和抽象接口

抽象类和抽象方法都使用 abstract 关键字进行声明。抽象类一般会包含抽象方法,抽象方法一定位于抽象类中。

抽象类和普通类最大的区别是,抽象类不能被实例化,需要继承抽象类才能实例化其子类。

1.2.7 接口

java8之前,接口可以看成一个完成抽象的类;java8之后可有拥有默认的方法实现(不支持默认方法的维护成本较高)。

  • 成员(字段 + 方法)默认都是 public 的,并且不允许定义为 private 或者 protected。
  • 字段默认都是 static 和 final 的。

和抽象类的比较:

  • 抽象类提供了一种 IS-A 关系,那么就必须满足里式替换原则,即子类对象必须能够替换掉所有父类对象。而接口更像是一种 LIKE-A 关系,它只是提供一种方法实现契约,并不要求接口和实现接口的类具有 IS-A 关系。
  • 从使用上来看,一个类可以实现多个接口,但是不能继承多个抽象类。
  • 接口的字段只能是 static 和 final 类型的,而抽象类的字段没有这种限制。
  • 接口的成员只能是 public 的,而抽象类的成员可以有多种访问权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值