前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >*Java面向对象的三大特性及理解*

*Java面向对象的三大特性及理解*

原创
作者头像
一半是我
修改2020-04-14 10:33:44
8900
修改2020-04-14 10:33:44
举报
文章被收录于专栏:Java学习INGJava学习ING

*Java面向对象的三大特性及理解*

三大特性概括:封装、继承、多态

一、封装

1.含义:

把描述一个对象的属性和行为封装成一个类,将具体的业务逻辑功能封装成一个方法,同时也将对象的属性私有化,通过开放的方法setter和getter来对属性值进行获取或者设定。封装的思想保证了类内部数据的完整性,使得用户无法直接操作类的内部数据,这样降低了对内部数据的影响,提高了程序的安全性和可维护性。

2.特性

(1)只能通过规定的方法访问数据;

(2)隐藏类内部的实现细节,提高可维护性;

(3)便于控制和修改实现。

3.示例

图-1
图-1

4.关于this关键字

(1)this代表当前对象;

(2)this.属性:操作当前对象的属性;

(3)this.方法:调用当前对象的方法;

(4)当方法参数与类的成员属性同名时,可使用this关键字进行区分;

(5)在某个构造方法中调用其他构造方法,调用时必须放在构造方法的首行。

二、继承(extends关键字)

1.含义:

继承是类与类之间的一种关系,即子类继承父类的属性和行为(但private修饰的属性和行为子类不可访问),使得子类对象具有父类的特性和方法,子类中也可以定义其专属的属性和行为。

2.特性

(1)子类拥有父类中的一切(构造方法不能被继承,拥有不代表可以访问,受修饰符约束),提高代码的复用性;

(2)继承具有单一性,即一个类只能继承一个父类;

(3)继承具有传递性,即可以实现多层继承,达到对某些特性的高度提取;

(4)private / final修饰的类不能被继承。

(5)初始化顺序:先初始化父类后初始化子类,先执行属性初始化,后执行构造方法中的初始化。

3.示例(若父类是抽象类,子类必须实现父类中的所有抽象方法,否则子类依然是抽象类,还需下一层子类继续去实现)

图-2
图-2

4.重写 VS 重载

(1)方法重写(覆写/覆盖):相对继承而言,子类对父类中的某个方法进行区别化的修改,前提是与父类中的该方法具有相同的方法名、返回类型以及参数列表,缺一不可,同时子类不能使用比父类更严格的访问权限。在子类中操作时,会优先调用子类的该方法(即就近原则),如需父类中原有的的该方法可使用super关键字调用。

(2)方法重载:在同一个类中处理不同数据的多个相同方法名的多态手段,前提是方法名相同,参数列表必须不同(类型/个数),返回类型不做要求,调用时根据传入的参数列表来决定具体是哪个方法,这就是多态性。(例如类的无参构造和参数列表不同的多个有参构造之间就是重载关系)

三、多态

1.含义

简单说,就是同一个操作产生不同的结果,Java中体现在两个方面,即引用多态和方法多态。实现多态的三个必要条件:继承;方法的重写;父类引用指向子类对象。

(1)引用多态

父类引用可以指向本类对象;

父类引用可以指向子类对象(反之不可,即继承的从属关系不可颠倒);

*注:引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定;运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。

(2)方法多态

父类引用指向本类对象,调用的方法是本类的方法;

父类引用指向子类对象,调用的是子类的方法(但不可调用子类专属的方法);

2.特性

(1)把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化;

(2)赋值之后,父类型的引用就可以根据当前赋值给它的子对象的特性以不同的方式运作;

(3)提高可维护性(继承保证),只需添加或修改某一子类,不影响其他类;

(4)提高可扩展性(多态保证),使用子类,可以对已有功能快速扩展。

3.示例(父类也可以是抽象类,子类实现父类的抽象方法,然后用父类引用调用亦可,结果取决于父类引用所指向的子类对象)

图-3
图-3

4.抽象类 VS 接口

(1)抽象类的特点

抽象类由abstract修饰;

抽象类中允许出现抽象方法(也可以没有);

抽象类不能通过构造器直接实例化;

可以在抽象类中定义普通方法供子类继承;

一个类如果有抽象方法,则该类必须定义为抽象类;

(2)接口(interface)

由final修饰的常量(可以没有)和公共的抽象(abstract)方法组成;

接口中的属性都是常量,即使定义时不添加public static final 修饰符,系统也会自动加上;

接口中的方法都是抽象方法,即使定义时不添加public abstract修饰符,系统也会自动加上;

接口不能被实例化,也不允许有构造方法;

一个类可以实现一个或多个接口,但只能继承一个父类;

继承父类和实现接口共存时,必须先继承后实现,即extends关键字必须在implements关键字前。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • *Java面向对象的三大特性及理解*
    • 三大特性概括:封装、继承、多态
      • 一、封装
        • 二、继承(extends关键字)
          • 三、多态
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档