JavaSE基础知识(5)—面向对象(5.4面向对象三大特征:封装、继承、多态)

面向对象编程具有三大特征:

封装

继承

多态

一、封装

1、好处

狭义的封装:也就是属性的封装,避免了任意赋值的危险,提高了数据的安全性
  ①隐藏一个类中不需要对外提供的实现细节
  ②使用者只能通过实现定制好的方法来访问数据,可以方便的加入控制逻辑,限制对属性的不合理操作
  ③便于修改,增强代码的可维护性

2、具体实现步骤 ★

①属性私有化(private)
②提供公共的(public)方法:set方法和get方法

示例:
class Person{
  private String name;
  public void setName(String name){
    this.name = name;
  }
  public String getName(){
    return name;
  }
}

3、注意

一般来讲,建议所有属性进行封装。当然如果希望将属性设置成只读的,则可以仅仅提供get方法,如果是只写的,则可以仅仅提供set方法

二、继承

1、概念

一个类没有定义成员,则具备了另一个类的成员,这种现象称为继承
被继承的类称为父类或超类或基类
继承其他类的类称为子类或派生类

2、好处

①提高代码的重用性
②提高代码的维护性和扩展性

3、语法

class 类名 extends 父类类名{}

4、特点★

①子类继承了父类的所有属性和方法,包含私有的,只是访问时先遵循成员的访问权限,当然也可以通过公共的方法去访问
②子类没有继承父类的构造器
③java支持的是单继承,也就是extends后面只能有一个类名
④不能滥用继承。子类和父类必须满足 is-a的关系
⑤java中所有类都直接或间接继承了Object类
⑥类的成员的继承不限于直接父类

5、子类调用父类构造器 ★

①子类不能继承父类的构造器
②子类必须调用父类的构造器,目的是为了初始化父类的信息
③如果子类没有显式调用父类的构造器,则系统将默认调用父类的无参构造器
④如果父类没有无参构造器,则子类必须显式调用父类的有参构造器,否则报错!
  语法:super(参数列表)
⑤构造器的调用,不限于直接父类,将一直往上追溯直到Object类

三、多态

1、理解

概念:一种事物有多种表现形态,前面的封装和继承都是为多态打基础的
好处:
  ①提高代码的重用性和扩展性
  ②不需要关心每个元素的实际类型,只需要知道它的通用类型,调用比较方便,扩展性更高

2、体现 ★

①方法的重载和重写 √
②对象的多态性(对象的向上转型) ★
  注意:对于一个对象来讲,编译类型和运行类型出现了不一致,这种现象称为:多态
  编译类型=左边的类型,由编译器检测的类型
  运行类型=右边的类型,由解释器检测的类型
相关概念:
本态调用:Person p = new Person();
多态调用:Person p = new Student();
正常方法调用:Student s = new Student(); s.say();
虚拟方法调用:Person p = new Student();p.say();

3、对象转型 ★

(1)向上转型

语法:父类类型 引用名 = new 子类类型();
理解:父类的引用指向了子类对象
特点:
  ①编译看左边,运行看右边
    能调用哪些成员,要看编译类型中定义了哪些成员
    运行效果,要看运行类型中的方法执行
  ②属性没有重写或多态之说

(2)向下转型

语法:子类类型 引用名 = (子类类型)父类 的引用;
特点:
  ①不能强转父类的对象,只能强转父类的引用
  ②强转的父类的引用,必须指向的是该目标子类的对象
  ③可以调用从父类继承来的以及子类本身定义的所有成员

4、多态的应用

(1)多态数组

理解:数组的定义类型为父类类型,元素可以为子类类型

(2)多态参数

理解:方法的形参类型为父类类型,实参可以为子类类型
instanceof:用于判断某对象的运行类型是否是右边的类型XX或XX的子类型
  写法:a instanceOf XX
  结果:true|false
应用场景:一般放在if条件中用作判断

上一篇:node nvm


下一篇:Java操作Oracle数据库以及调用存储过程