学习Java08

面向对象整理

面向过程和面向对象的区别

面向过程编程思想不考虑封装,继承,多态这些事,直接定义数据为静态变量,用静态函数操作数据。基于过程编程。面向过程编程,代码不具有可复用和可过扩展性。

面向对象编程思想需要先抽象处实体的结构,并用类进行封装,用成员方法变量表达实体的属性,用成员方法封装实体属性封装,提供构造方法构造对象,基于对象编程。面向对象编程,代码具有可复用和可扩展性。

举例: 实现汽车租赁系统

       面向过程的思想:

           定义多个静态数组,存储汽车各项数据,直接定义静态函数实现各种业务过程

       面向对象

           先抽象汽车的实体结构,并使用汽车类进行封装,然后创建汽车数组存储汽车实体的数据,在考虑业务的实现功能。

面向对象的三大特性

  1. 封装
  2. 继承
  3. 多态

第一特性:封装

用成员变量来描述对象的属性,并用private 进行私有化封装,不对外暴露对象的属性。防止外部误操作。

用成员方法来封装属性的操作,并暴露给外部调用。典型的就是setter(置值器)和getter(读值器),一个是提供给外部进行属性设置,一个提供给外部读写属性的值。

第二特性:继承

1.继承是Java中类与类之间的关系

2.继承的关键字是extends

3.发生继承的类称为子类,被继承称为父类

4.Java不支持多继承,只支持单继承,单支持多级继承

在继承体系的顶层式Object类Object类称为祖先类,上帝类。

5.如果一个类没有显示继承父类,则隐式继承Object类

6.子类可以继承父类的非私有(非private修饰)成员

7.父类的构造方法不能被子类继承,但可以使用super()调用

8.父类的静态成员与继承无关

9.子类继承父类的时候,如果父类中有抽象方法,子类必须要重写,除非把子类也变为抽象

第三特性:多态

先有继承而后有多态,多态的反义词是单态

  1. 指针的多态(数组的多态,参数的多态,返回值的多态归根到底就是指针的多态

  如果指针是具体的子类类型,则指针是单态指针,只能指向具体的子类对象

  如果指针是抽象的父类类型,则指针是多态指针,可以指向任意的子类对象

  1. 方法的多态(1.基于重载实现2.基于重写

  重载是编译时多态的体现。

重写是运行时多态的体现。

重载和重写的区别

重载和重写都是方法多态的体现

重载(overload)是编译时多态的体现

1.重载发生在同一个类中,Java允许一个类中的多个方法同名,但必须满足重载的要求。

2.方法名相同,但是方法的参数列表不同(可以是参数的个数不同,或者时参数类型不同)

3.静态方法,构造方法,成员方法都可以重载

重写(override)是运行时多态的体现

  1. 重写发生在子类和父类之间,子类重写父类的方法,其目的是:当使用父类型指针调用子类方法的时候,可以无需向下转型
  2. 子类方法与父类方法同名,
  3. 访问修饰符要大于等于父类方法,
  4. 参数个数必须父类保持一样,参数类型可以小于等于父类的参数类型
  5. 返回值类型可以小于等于父类方法的返回值

抽象类和抽象方法的关系

  1. 抽象类和抽象方法都需要使用abstract关键字修饰
  2. 抽象方法必须出现在抽象类,
  3. 抽象类中可以有抽象方法,也可以没有

普通类和抽象类的区别

普通类可以实例化,也可以被继承

抽象类不可以被实例化,只能被继承

(实例化就是new构造方法创建对象)

向上转型和向下转型的区别

向上转型

  1. 将子类对象指针赋给父类指针的语法称为”向上转型“隐式的
  2. 继承是向上转型的前提,向上转型的目的是为了实现多态的指针
  3. 向上转型的副作用:指针无法访问下级对象的成员(除非发生重写)

向下转型

  1. 将父类型指针赋给子类型指针的语法称为向下转型,需要显式的强制转换,通常伴随

Instance做类型判断,否则可能会出现ClassCatExcepion类型异常。

指针向下转型为子类类型,就可以访问子类中特有成员了(非重写方法)

访问修饰符

Private的特点:只有本类可见

(default)的特点:只有同包可见

Protected的特点:子类可见

Public的特点:任何地方都可见

抽象类和接口的区别

接口

1.接口也是一种源代码文件

     定义类的关键字是class

     定义接口关键字是interface

2.接口的出现让Java也能够实现多继承,一个类只能继承一个父类,但是可以继承多个接口

     子类继承/扩展父类,关键字是extends

     子类继承/实现/扩展接口,关键字是implements,

  1. 接口和抽象类进行比较

相同点:

  1. 都可以作为指针的类型,实现多态指针
  2. 都不可以实例化

不同点:

  1. 抽象类用abstract class定义,接口用interface定义
  2. 抽象类用extends继承接口用implement实现
  3. 类只能单继承,接口可以多实现
  4. 虽然两者都不可以被实例化,但是抽象类可以有构造方法,接口不可以有构造方法
  5. 抽象类可以有抽象方法,也可以有具体方法,接口只能有抽象方法,且接口中所有方法默认”private 和abstract“修饰的
  6. 抽象类可以有成员变量,接口不能有成员变量,只能有静态常量

如何理解接口? 如何理解面向接口编程

代码中存在依赖和调用关系,应该面向接口编程

调用方-被调用方

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值