面向对象的基本思想:

使用对象,类,继承,封装,多态基本概念进行程序设计

对象:

系统中描述客观事物的实体,构建系统的一个基本单位,一个对象由一组属性和这组属性进行操作的一组服务组成,通过new对类进行实例化

对象的生命周期:

当不存在对一个对象引用,该对象成为一个无用对象,java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放,调用System.gc()强制要求进行内存回收,但只是提醒JVM进行内存回收,真正的内存回收发生时间不确定

java中内存回收的线程是一个优先级较低的线程,防止对程序本身运行的干扰

 

类:

类是对所有对象的统一描述,包含属性和方法两个部分,独立的程序单位,包括属性和方法两个主要部分

成员变量限定词:

static:静态变量(类变量)

final:常量,一次赋值不改变

transient:暂时性变量,用于对象存档,对象的串行化

volatile:贡献变量,用于并发线程的共享

方法声明中限定词的含义:

static:类方法,可以通过类名直接调用

abstract:抽象方法,没有方法体

final:方法不能被重写

native:集成其他语言的代码

synchronized:控制多个并发线程的访问

方法的声明:

方法名,返回类型,外部参数,参数可以是简单数据类型,可以是引用数据类型

构造函数:

特殊的方法,java中每个类都有构造函数.初始化类的对象,构造函数具有和类名相同的名称,不返回任何数据类型

重载经常用于构造函数

只能new调用

一个类可以有多个构造函数

无参的构造函数时默认的

只要定义了一个不是默认的构造函数,则无无参构造

封装:

隐藏对象内部细节,保留有限的接口和方法与外界进行交互,封装是使对象以外的部分不随意访问和操作对象内部属性

避免外界对对象内部属性的破坏

可以通过对类成员设置一定访问权限,实现类中成员的信息隐藏

package com.collction;

public class Test1{
	private double amount;  //设置权限
	public void withdraw(double amount){
		if (amount<=this.amount) {
			this.amount -= amount;
		}
	}
	public void deposit(double amount){
		if (amount<=0) 
			return;
			this.amount +=amount;
	}
	private double getAmount(){ //只能够获取,不能够设置
		return this.amount;
	}
}

继承:

子类对象拥有父类全部属性与方法,子类对父类的继承

父类可以有多个子类,一个子类只有一个父类,为单继承

继承实现了代码复用

java中所有的类直接或间接继承java.lang.Object

子类不能继承父类中访问权限为private成员变量和方法

可以重写父类方法,命名和父类同名非成员变量

java中通过super实现父类成员的访问,super用来引用当前对象的父类

super

super.variable:访问父类被隐藏的成员变量的方法

public class Test1{
	public int a;
}
class T2 extends Test1{
	private int a;
	void test(){
		this.a = 2; //这是调用T2中的a
		super.a =10;//父类的Test1
		
	}
}

super.Method():调用父类构造方法

super():父类构造函数必须在子类构造函数第一行调用,方法调用无此限制

多态:

对象的多态性:父类中定义的属性或方法被子类继承之后,具有不同数据类型或表示不同行为,使得同一属性或方法在各个子类中具有不同语义

java多态性通过重写实现,子类对父类进行编写子类中方法和父类一样的方法名.返回类型,返回参数

需要父类已有放入方法,通过super关键字引用当前类的父类

子类函数的访问权限不能低于父类

单一职责原则

Single Responsibility Principle,,简称是SRP

一个类只负责一项职责,高内聚,低耦合的实现

里氏替换原则 :子类可以扩展父类的功能,但不能改变父类原有的功能

多态的特性,可以任意重写父类方法,会增加代码出问题几率

1.子类可以实现父类抽象方法,不能覆盖父类非抽象方法

2.子类可以增加自有方法

3.子类覆盖或实现父类方法,方法的形参要比父类方法输入参数更宽松

子类方法实现父类抽象方法时,方法的返回值要比父类更严格

 依赖倒置原则:

高层级和低层级都依赖于抽象,抽象不依赖于细节,细节依赖于抽象

抽象在Java中指interface和抽象类,都不能实例化

细节是具体的实现,实现类可以通过new实例化

依赖的传递:

接口声明

构造函数中传递

通过setter方法传递

开闭原则:

通过继承或者多态,实现在不改变源代码的情况下变更它的功能

迪米特法则:

一个对象最好避免接触其他的对象