浅谈java面向对象
1、概述
面向对象程序设计(Object Oriented Programming),本质是以建立模型体现出来的抽象思维过程和面向对象的方法。 模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
2、特征
- 封装性:把客观事物封装成抽象的类,并且类可以把⾃⼰的数据和⽅法只让可信的类或者对象操作,对不可信的信息隐藏。
- 继承性:继承是指这样⼀种能⼒:它可以使⽤现有类的所有功能,并在⽆需重新编写原来的类的情况下对这些功能进⾏扩展。
- 多态性:指⼀个类实例的相同⽅法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接⼝。
3、类与对象
-
类是我们定义的一个模板,对象即是对这个模板的具体填充。例如,人是一个类,可以有张三这个具体对象,牛是一个类,可以有张三家的那头年龄最大的牛这个具体对象。
-
类的组成
- 属性(描述对象特点,譬如牛类的一个对象张三家的那头年龄最大的牛,年龄就是这个对象的属性之一)
- 方法(即这个类可以进行的操作,譬如牛这个类,他们具有耕地、拉车、吃饭、睡觉等操作)
-
类的定义
使用关键字class:
权限修饰符 class 类名{ 成员变量定义; 构造方法定义; 静态或实例代码初始化块; 成员方法定义; } 例子:定义一个类Person public class Person{ private int age;//年龄 private String name;//名字 private String IDCardNum;//身份证号 protected double money;//财富量 public String location;//居住地址 public Person(){//一个空参构造器 } public Person(int age, String name, String id, double money, String location){//重载一个可以给所有属性都赋值的构造器, this.age = age; this.name = name; this.IDCardNumm = id; this.money = money; this.location = location; } public String name(){//返回当前对象的姓名 return this.name; } public int getAge(){//返回当前对象的年龄 return this.age; } public void eat(){//描述吃饭行为 } }
其中需要注意:
- 构造器(构造函数):用于对象初始化,格式为: 权限修饰符 类名(参数列表){函数体}
- this关键字:this所指的是当前对象的引用。
- 权限修饰符:
- public: 类外可访问,所有包
- private:类外不可访问,体现封装的特点,可以在类里定义Get方法然后实现在类外来访问
- protected:在同一个包及其子类(不同包)中的代码访问。
- 无修饰符:在同一个包内可访问。
- static关键字:static修饰的方法或者属性,不依赖于类本身。
- 修饰属性的时候,我们可以称这个属性为类属性,参考python中的类属性描述一样,这个类属性是描述类本身的属性的,譬如人这个类,它本身可以有数量这个属性,它不依赖于张三这个具体对象。
- 修饰方法的时候,我们称被修饰的方法为静态方法,静态方法不可以访问非静态的属性或方法,非静态的方法可以访问静态的属性或方法。
4、继承与多态
-
继承:在已有类的基础上,添加新的变量和方法,从而产生一个新的类。(是实现程序代码复用的有力手段,是创建新类的主要方法描述了现实世界中客观事物之间是一个"is a"的关系)
- 定义格式 (extends关键字)
class 子类名 extends 父类名 { 成员变量定义; 构造方法定义; 静态或实例代码初始化块; 成员方法定义; }
Tips:
- 在类声明中,extends表明创建父类的子类。(我们也称父类为超类或基类)
- java仅支持单继承:也就是说extends后只能指定一个父类名,且这个父类是一个非final的可访问类。
- 缺省extends表示Object作为父类,由此可知所以的类都是Object的子类。
- super关键字:主要用于调用父类的构造器。
- final关键字:作为一个修饰符,他可以修饰属性(成员变量),也可以修饰方法和类。使用final修饰的属性必须在声明的时候或者在构造器中初始化;被final修饰的类不可以被继承,并且其所包含的方法都默认为final(不含属性);
-
多态:由继承和封装所引出,指一个程序中同名的不同方法共存的情况。即同一个方法定义几个实现方式,根据情况执行不同的方式,“一个名字,多种们方法”。
-
常见的形式:
- 方法重载:参数类型不同;参数顺序不同;参数个数不同;
- 方法覆写(覆盖/重写):返回类型、方法名、参数完全一致;访问级别不可低于父类;不能抛出更多的受检查异常类型;
-