面向对象编程
1、类与对象
类是从现实生活中抽象到程序中的某一类实物的统一描述。
对象是某一类实物的具体个体。
日常开发:
- 确定需要工作的对象
- 分析这个对象在java的类库中有没有对应的类型(class)存在。
- 如果java类库中有该类型,直接通过该类型new对象使用。
- 如果java类库中没有该类型,就自己定义这个类型(class),然后通过这个类new对象使用。
- 使用成员属性(变量)来定义该类的金泰信息
- 使用成员方法来定义该类将具备的功能。
- 通过调用对象的具体功能方法完成某个功能
- 通过调用对象不具备某个功能方法,那么久换个对象工作,或者给这个类加入需要的功能方法。
类的组成:
- 成员属性:描述类的静态信息
- 成员方法:描述类的动态功能行为
- 构造器(构造方法):用于给类精选初始化、创建对象(new)
类的构造函数是特殊的方法,在对象实例化时自动被调用,通常用于初始化数据。
构造函数的特点:
1.构造函数名和类名同名;
2.构造函数无返回值;
3.可以不带参数或带参数,称为构造函数重载。
- 代码块
- 内部类
2、面向对象特性
-
抽象:将现实生活中的事物、动作等等通过代码在程序中描述。
-
**封装:**就是包装,被包装的元素不能被外部直接发现。
- 好处:方便实现重复使用。可以讲不想暴露的元素隐藏在封装体的内部。
- java实现:
- 用包组织类、用类组织成员(属性、方法等)、用方法组织功能代码
- 利用修饰符来完成成员变私有化
- JavaBean:应该包含私有(private)的成员属性及时对应属性的公有(pulbic)的getting、setting方法,必须包含无参构造器。
-
**继承:**从一个已有的租价中获取元素,避免重负构建某些元素。
- 好处:提升重复利用。建立体系关系。
- java实现:
- 通过extend关键字实现类与类之间的集成。被集成的类称为父类、基类,实现继承的类称为子类。
- 子类可以继承父类的非私有化(private)元素(成员属性、成员方法)。
- Object是所有java类的根父类。如果没有显示生命继承关系,那么这个类默认继承自Object。
- java继承关系中的对象创建过程:
- Cat extends Animal
- Cat extends Animal
构造器不能被继承,但是父类构造器可以被子类调用。
state只能被间接继承。- 方法的重写:方法重写发生父子类结构、接口与(当福诶提供的方法不能满足子类具体要求时)。子类中重写的方法要求必须和父类方法名相同,访问修饰符>=父类方法,重写方法的返回值和参数列表需要与父类方法保持一致。
-
**多态:**在面向对象变成中,工作的核心单元对象,可以在不同时期拥有多种形态(编译时形态【编译形态】、运行时形态【真实形态】),以适应更灵活的变成编码。
- 优点:提升程序的灵活性、可扩展性。
- 缺点:
- java实现:
- 前提条件:类与类之间有关系(父类与子类的集成关系、接口与实现的实现关系)。
- 对象可以在体系中的多个类型中完成相互转换
- 类型自动提升(向上转型):子类自动提升为父类(祖父类)类型。
- 类型强制转换(向下转型):父类类型的对象通过强制转换语法为子类类型(向下转型时需要关注该对象的真实类型,最多向下转换为其真实类型,且不能转换为无关类型)
- 在多态情况下,如果子类重写了父类方法,且对象的真实类型是子类类型,那么在程序运行期间,调用的方法指向真实类型中的方法。
思考:
1、java中的访问修饰符有哪些?他们的限定范围分别是什么?
2、什么是方法重载(overlord)?什么是方法的重写(override)?有何区别?
3、this和super分别代表什么?
4、byte b1 = 10;b1 += 10;编译是否报错?否
byte b1 = 10;b1 = b1 + 10;编译是否报错?是
以下作用域范围从小到大:
private:私有域,只能在本类内部访问,权限最小
default:默认修饰符,没有明确声明修饰符时采用,被其修饰的类、属性或方法只能被当
前类所属包中的类访问
protected:只能父类和子类可以访问,其他类不行
public:公开域,允许外部访问,权限最大