Java面向对象特性(一)
前言
后面准备整理一下Java基础、JVM和并发编程的知识,后面再是ssm框架。这些都是基础部分,也是最重要的部分之一。本篇从Java语言的面向对象特性开始讲诉,Java的这个特点和C#很像。Java主要有封装、继承、多态这三个特性,抽象不是特性,但是也很重要。
类和对象
区分类和对象,由类实例出对象,怎么去定义一个类,怎么通过类的构造器实例一个对象。类中有属性和方法。方法有构造方法和普通方法。属性有成员变量和局部变量。构造器没有返回值,返回值时隐式的。
构造器
如果没有构造器,会默认提供一个无参数的构造器,构造器最大的用处是在创建对象时执行,创建一个对象的时候会执行初始化:所有基本类型0,布尔为false,引用类型为null。构造器也不是完全负责创建Java对象,new的时候已经开辟了内存空间,只不过智能字啊构造器中通过this使用,构造器用来返回一个对象,通常还会赋值给一个引用变量。
构造器也可以像方法一样重载。
方法详解
方法在逻辑上要么属于类,要么属于对象。方法是类或对象的行为特征的抽象。类似传统结构化程序中的函数。
方法的参数可以指定个数,也可以可变个数,就是当成数组传入。参数传递机制有值传递和引用传递。基本类型是值传递,引用类型是引用传递。
方法体内调用他自己,该方法就是递归方法。包含了一种隐式的循环,所以理论上递归都可以转为循环。
类中方法是可以重载的,就是允许方法名一样,但是参数不一样。
变量
类中的变量分为成员变量和局部变量,成员变量不在方法体内,分为静态和非静态的,即类成员和实力成员变量,而局部变量一般包括形参、方法的局部变量(定义在方法内)、代码块的局部变量(在代码块内,例如for循环内部)。
这些的不同必然导致了变量的访问方式、作用范围和生命周期等方面必然有不同。
局部变量必须显式的初始化才能使用,而成员变量类加载的时候已经赋了初值。局部变量不属于任何实例或者类,他在方法的栈内存中,往往是基本类型和对象的引用。方法执行完就释放。
了解这些之后我们要合适选择变量类型。准确控制变量的作用域。
封装
它指将对象的状态信息部分隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类提供的方法进行操作和访问。具体该怎么实现呢,适用访问控制符。
访问控制符
有下面四种private、default(friendly)、protected、public四种,比较如下图:
导入包
有这三个要掌握:package、import、import static;Java默认导入java.lang包下的所有类。下面列出常用包:

继承
Java是单继承多接口,用关键字extends实现。子类继承负累所有成员变量和方法,值得指出的是:子类不能获得父类的构造器。
重写(覆盖)父类方法
override,遵守两同两小一大原则:方法名、参数相同;子类返回值类型应该比父类更小或者相等、子类抛出的异常也应该比父类更小或者相等;子类方法的访问权限应该比父类更大或者相等。而且要么都是类方法,要么都是实例方法。
super和this
super....//使用父类方法或属性
this....// 使用类本身方法或属性
子类构造器
从运行过程上看,创建任何对象时总是从该类所在继承树的最顶层类的构造器开始执行,然后依次向下执行,最后才执行本来的构造器。
多态
Java引用变量有两个类型,一个是编译时类型,一个时运行时类型。编译类型由声明该变量的类型决定,运行时类型由实际赋值给变量的类型决定,如果出现不一致,就可能出现所谓的多态。例如:
SuperClass base=new SubClass();
因为子类是一个特殊的父类,因此允许把一个子类对象直接赋值给一个父类的引用类型。无须任何类型转换,精确的说时向上转型,向上转型由系统自动完成。但是编译时父类对象无法调用子类方法(可以利用反射来执行该方法)。
强制类型转换和instanceof 运算符
double d=113.4
long l=(long)d;
Objext hello="hello";
if(hello instanceof Object){
....
}
if(hello instanceof String){
....
}
继承和组合
继承是实现类复用的重要手段,但继承带来一个最大的坏处:破坏了封装,相比之下,组合也是实现类复用的重要方式。
继承在高可用的同时,暴漏了父类的实现细节,且子类还可以任意篡改,所以父类不想子类改变的属性方法应该使用private修饰符,还可以通过final修饰符控制不让子类改变。
被final修饰的类时不可变的,不能当作父类,如String。
初识化块
初始化块是类出现的第四种成员,前面依次由成员变量、方法和构造器,一个类里可以有多个初始化块。初始化块的修饰符只能是static,而且创建对象时,总是先执行初始化块,按出现顺序在执行构造器。
从某种程度上看,初始化块是构造器的补充。初始化块总是在构造器执行之前执行,系统通用可食用初始化块啦进行对象的初始化操作。
静态初始化块:在类加载的时候执行,而不是像之前那种在对象加载的时候执行。
小结
本章主要介绍了Java面向对象的基本知识,包括如何定义类,如何为类成员添加成员变量、方法,以及如何创建类的对象。深入分析对象和引用变量之间的关系,方法的参数传递机制、重载,访问控制符等,三种面向对象特性的分析。
说明
文中出现的图片,文字描述有些来自互联网,但是出处无法考究,如果侵犯您的相关权益,请联系我,核实后我会马上加上转载说明。谢谢!!!