封装(Encapsulation)
封装的概念
封装(encapsulation) 就是把抽象出来的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部, 程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作
封装实现的步骤
-
将属性进行私有化(private)[在外界不能直接修改属性]
-
提供一个公共的(public) set 方法,用于对属性进行判断和赋值
public void setXxx(类型 参数名){ //加入数据验证的业务逻辑 属性 = 参数名 }
-
提供一个公共的 get 方法,用于获取属性的值
public XX getXxx(){ return xx; }
继承(Extends)
继承的介绍
继承可以解决代码复用,提高代码的扩展性和维护性。当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法。所有的子类不需要重新声明这些属性和方法,只需要通过 extends 来声明继承父类即可。
继承的基本语法
class 子类 extends 父类{} //子类自动继承父类的所有属性和方法 //父类又叫超类,基类 //子类又叫派生类
继承的细节
-
子类继承了父类的所有属性和方法,非私有属性可以在子类直接访问,私有属性不能在子类直接被访问,需要通过父类提供的公共方法去访问
-
子类必须调用父类的构造器去完成父类的初始化
-
当创建子类对象时,不管使用子类的哪个构造器,总会默认调用父类的无参构造器。如果父类没有提供无参构造器,则需要在子类的构造器中使用关键字 super 去指定调用父类的哪个构造器去进行父类的初始化
-
如果希望指定调用父类的某个构造器,需要显示的调用一下
-
super 在使用的时候需要放在构造器的第一行
-
super() 和 this() 都需要放在方法的第一行使用,所以这两个关键字不能同时使用
-
Java 的所有类的顶级父类都是 Object
-
父类构造器不限于直接父类,可以一直追溯至 Object
-
因为 Java 的单继承机制,所以子类只能继承一个父类
class Base{ private String name = "jack"; public int age = "18"; public Base(){} public Base(String name){ this.name = name; } public Base(int age){ this.age = age; } public Base(String name,int age){ this.name = name; this.age = age; } public String getName(){ return name; } public int getAge(){ return age; } public void setName(String name){ this.name = name; } public void setAge(int age){ this.age = age; } } class A0 extends Base{ public A0(String name, int age) {//调用父类的构造器完成父类的初始化 super(name, age);//super 指定调用父类的带两个参数的构造器 } public void say(){ Systeam.out.println("this name is"+getName()+" and this age is"+age); } }
继承返回信息的关系
按照查找关系来返回信息:
-
首先看子类自己是否拥有该属性
-
如果子类有这个属性,并且可以访问,则返回信息
-
如果子类没有这个属性,就看父类有没有,如果有并且可以访问,就返回信息
-
如果父类没有,按照(3)的规则继续向上查找,直到Object...
-
不能越级访问,一旦在某一级找到了相应属性但不能访问,那么会直接报错,并不会继续向上查找了
Super
基本介绍
Super 用于子类访问父类的属性、方法、构造器
基本语法以及部分说明
-
访问父类的非私有的属性和方法,不能直接访问父类的私有属性以及方法
-
访问父类的构造器,只能放在代码块的第一行使用。在子类调用父类的构造器进行初始化时,默认使用 super() 调用父类的无参构造器
多态(Poly)
基本介绍
方法或对象具有多种形态,和 封装、继承,共同组成面向对象的三大特征。多态是建立在封装和继承之上的
多态的部分说明
多态形成的前提:两个对象之间存在继承关系
-
一个对象的编译类型和运行类型可以不一致
-
编译类型在定义对象时就已经确定了,不能改变
-
运行性可以根据需要改变
-
编译类型看等号 "=" 左边,运行类型看等号 "="
向上转型部分说明:
-
向上转型本质:父类的引用指向子类对象
-
基本语法:父类类型 引用名 = new 子类类型()
-
特点:编译类型看左边,运行类型看右边。可以调用父类中的所有成员(符合访问权限),不能调用子类中的特定成员。
-
调用方法时,按照运行类型开始查找相关方法,按照继承返回信息关系的原则进行查找
向下转型部分说明:
-
语法:子类类型 引用名 = (子类类型) 父类引用
-
只能强转父类的引用,不能强转父类对象
-
要求父类的引用必须指向的当前目标类型对象
-
可以调用子类类型中的所有成员