回顾JAVA---2.面向对象

面向对象

- 特点:将复杂的事情简单化,将过程的执行者变成为指挥者,符合人们现在的思考习惯
- 过程:其实就是方法  对象:其实就是将方法等一些内容进行了封装
- 匿名对象:当方法只进行依次调用时可以使用匿名对象,当对象成员进行多次调用时不能使用匿名对象,必须给对象起名字
- 成员变量:对应事物的属性
- 成员方法:对应事物的行为
- 私有的成员:其他类不能直接创建对象来访问,所以只有通过本类对外提供具体的访问方式来完成对私有的访问
- 好处:可以在方法中进行逻辑判断等操作,对数据进行判断等操作
- 成员变量和局部变量的区别
 --成员变量直接定义在类中,在整个类中有效,存在于堆内存中,随着对象的产生而产生,消失而消失
 --局部变量定义在方法中,参数上,语句中,只在属于的大括号内有效,大括号结束局部变量失去作用域,存在于栈内存
- 创建一个对象都在内存中做了哪些事情
 --先将硬盘上指定位置的.class文件加载进内存
 --执行main方法时,在栈内存中开辟一个main方法的空间(压栈-进栈),然后在main方法的栈区分配一个变量P
 --在堆内存中开辟一个实体空间,分配一个内存首地址值
 --在该实体空间中进行属性的空间分配,并进行默认初始化
 --对空间中的属性进行显示初始化
 --进行实体的构造代码块初始化
 --调用该实体对应的构造函数,进行构造函数初始化
 --将首地址赋值给P,P变量就引用了该实体,指向了该对象

---封装---

- 封装:面向对象的特征之一,是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式
- 好处:简便化隔离;便于使用;提高重用性;安全性
- 封装原则:将不需要对外提供的内容都隐藏起来,把属性隐藏,提供公共方法对其访问
- this:代表对象,就是所在方法所属对象的引用,那个对象调用了this所在的方法,this就代表哪个对象,就是哪个对象的引用
- static:修饰符,用于修饰成员变量和修饰成员方法
 --想要实现对象中的共性数据的对象共享,可以将这个数据进行静态修饰
 --被静态修饰的成员可以直接被类名所调用 类名.静态成员
 --静态随着类的加载而加载,而且优先于对象存在
 --有些数据是对象特有的数据,是不可以被静态修饰的
 --静态方法只能访问静态成员,不可以访问非静态成员
 --静态方法中不能使用this,super关键字
 --主函数是静态的
- 成员变量和静态变量的区别
 --成员变量所属于对象,存在于堆内存中,随着对象的创建而存在,只能被对象所调用
 --静态变量所属于类,存在于方法区中,随着类的加载而存在,可以被对象调用也可以被类名调用
- 成员变量可以称为对象的特有数据,静态变量称为对象的共享数据
- 执行顺序:静态代码块-->构造代码块-->构造函数
- java中有23种设计模式-->单例设计模式
 --保证一个类在内存中的对象唯一性
 --不让其他程序创建该类对象
 --在本类中创建一个本类对象
 --对外提供方法,让其他程序获取这个对象
 --因为创建对象都需要构造函数初始化,只要将本类中的构造函数私有化,其他程序就无法再创建该类对象
 --就在本类中创建一个本类对象
 --定义一个方法,返回改对象,让其他程序可以通过方法得到本类对象
class Single{
	private Single(){}//私有化构造方法
	private static Single s = new Single();//创建私有并静态的本类对象
	public static Single genInstance(){//定义共有并静态的方法,返回该对象
		 return s;
	}
} 

---继承---

- 好处:提高了代码的复用性,让类与类之间产生了关系,提供了另一个特征多态的前提
- 父类的由来:其实是由多个类不断向上提取共性内容而来的
- java只支持单继承,但是保留了这种多继承机制,进行改良
- 子类继承父类时,必须保证子类方法的权限要大于等于父类方法的权限可以实现继承,否则编译失败
- 覆盖时,要么都静态,要么都不静态(静态只能覆盖静态,或者被静态覆盖)
- 继承的弊端:打破了封装性,失去灵活性,给底层的改变增加了不必要的麻烦
- final这个关键字是一个修饰符,可以修饰类,方法,变量
- final修饰的类是一个最终类,不可以被继承
- final修饰的方法是一个最终的方法,不可以被覆盖
- final修饰的变量是一个常量,只能赋值一次
- 抽象类:abstract
 --抽象:不具体,看不明白
 --抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰(可以描述类和方法,不能描述变量)
 --抽象方法只定义方法声明,并不定义方法实现
 --抽象类不可以被创建对象(实例化)
 --只有通过子类继承抽象类并覆盖了抽象类中的抽象方法后,该子类才可以实例化,否则该子类还是一个抽象类
- 模板方式设计模式:当功能内部一部分实现是确定的,一部分实现是不确定的,这是可以吧不确定的让子类去实现
 
abstract class GetTime{
		 	public final void getTime(){//此功能如果不需要重复写,可加final限定
		 		long start = System.currentTimeMillis();
		 		code();//不确定功能部分,提取出来,通过抽象方法实现
		 		long end = System.currentTimeMillis();
		 		System.out.println("毫秒是:" + (end-start));
		 	}
		 	public abstract void code();//抽象不确定的功能,让子类复写实现
		 }

class SubDemo extends GetTime{
		 	public void code(){//子类复写功能方法
		 		for(int i=0;i<1000;i++){
		 			System.out.println("y");
		 		}
		 	}
		 }


- 接口:interface
 --接口中有抽象方法,说明接口不可以实例化,接口的子类必须实现了接口中所有的抽象方法后,该子类才可以实例化,否则该子类还是一个抽象类
 --类与类之间存在着继承关系,类与接口之间存在的是实现的关系,继承用extends  实现用implements
 --接口和类不一样的地方就是接口可以被多实现,这就是多继承改良后的结果,java将多继承机制通过多实现来体现
 --一个类在继承另一个类的同时,还可以实现多个接口,所以接口的出现避免了单继承的局限性,还可以将类进行功能性扩展
 --其实java中有多继承的,接口与接口之间存在着继承关系,接口可以多继承接口
 --接口是对外提供的规则,接口是功能的扩展,接口的出现降低了耦合性
- 抽象类与接口  都是不断向上抽取的结果
 --抽象类:一般用于描述一个体系单元,将一组共性内容进行提取,可以在类中定义抽象类容让子类实现,可以定义非抽象内容让子类直接使用,定义的都是一些体系的基本内容
 --接口:一般用于定义对象的扩展功能,是在继承之外还需这个对象具备的一些功能

---多态---

- 面向对象特征之一,函数本身就具备多态性,某一种事物有不同的具体体现
- 体现:父类引用或者接口的引用指向了自己的子类对象 --> Animal a = new Cat();
- 多态的好处:提高了程序的扩展性,继承的父类或接口一般是类库中的东西,只有通过子类去覆写要改变的某一方法,这样通过将父类的应用指向子类的实例去调用复写的方法就行了
- 多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但只能访问父类中具有的方法,不能访问子类特有的方法
- 多态在子父类中的成员上的体现特点
 --成员变量:在多态中,子父类成员变量同名
 --编译时期:参考的是引用型变量所属的类中是否有调用的成员,编译时不产生对象,只检查语法错误
 --运行时期:也是参考引用型变量所属的类中是否有调用的成员
 --无论编译还是运行,成员变量参考的都是引用型变量所属类中的成员变量-->成员变量编译、运行都看左边

 --成员方法:在子父类中,同名方法将会覆盖
 --编译时期:成员方法参考引用型变量所属类中是否有调用的方法
 --运行时期:成员方法参考对象所属类中是否有被调用的方法
 --成员方法编译看引用类型变量所属的类,运行看对象所属的类-->成员方法编译看左边,运行看右边

 --静态方法:其实不属于对象,而是属于该方法所在的类
 --编译时期:参考的是引用型变量所属的类中是否有调用的成员
 --运行时期:也是参考引用型变量所属的类中是否有调用的成员

 --调用静态的方法引用是哪个类的应用调用的就是哪个类中的静态方法-->静态方法编译、运行都看左边


原文地址:https://www.cnblogs.com/Amen-Z/p/8511993.html