类class
	将一类事物的特征和动作,封装为属性和方法(封装相关数据,方法代码);
封装  
	实例,一个具体的个体(new创建)
	可以保存独立的数据,独立控制执行指定方法;
引用
	保存一个实例的地址
	引用特殊值null
	局部代码块:
		在方法中提供一个{}.
		局部代码块可以提高栈内存的效率,可以提前释放局部的变量内存。
	构造方法
		构造代码块:会在每一次创建对象时调用,构造代码块是先与构造方法执行的
		使用方式:直接在类中提供一个{}
		新建实例时执行,子类调用父类的无参构造方法
		class定义类必须要有构造方法
		不定义,默认为无参
		构造方法作用:任意
		常用方法:赋值

	this 
		1.this.属性名---本类里的成员变量,当变量名重复时使用
		2.this.方法名------本类的方法名
		3.This(……)----本类里的构造方法,减少代码重复
			This()只能用在构造方法中的第一行
		
	Overload 方法重载:一个方法有多种参数传递方式
		同名不同参数,
	
	
继承:
	把原有类中的公共的代码抽取到一个新类中,原有类和新类使用extends关键字进行联。新类称之为父类,原有类称之为子类,子类会继承父类的所有属性和方法。但是子类只能使用对子类可见的属性和方法。
	JAVA只支持单继承,只能继承一个父类,一个父类可以有多个子类

	不继承父类的部分
		构造方法
		私有成员 private
	子类实例
		由父类实例和子类实例绑定,整体作为一个实例
		调用时,先找子类,再找父类
	Overried 方法重写:在父子类中出现了方法签名一致的非静态方法,就称之为重写(Override),或者称之为覆盖
		子类调用父类方法时,父类方法不满足子类的需求,需要重写,
		必须与父类的返回值与参数一致;
		两同:方法名,参数列表相同
		返回值异常两小:
			1.返回值:
			  如果返回值为基本数据类型,子类的返回值必须和父类相同
			  如果返回类型为引用数据类型,子类返回值小于等于父类;
			2.异常:
			子类向上抛出的异常 要小于等于父类;
		一大:
			访问修饰符权限;public >protected>default>privade>
			子类的访问修饰符权限必须大于等于父类;
	Super
		super关键字可以调用父类可见的方法和属性
		super()和this()不能共存
		1.super.属性名-----父类里面的成员变量
		2.super.方法名---父类的方法名
		3.super()/super(参数) ----调用父类的无参构造/可见方法
			Super()只能出现在构造方法体第一句
			每一个类的构造方法有默认的super();

多态:事物的多种形态
	//编译看左边,运行看右边:
	编译时多态:方法重载
	运行时多态:向上造型,方法重写
	一致的类型,所有子类型实例,都可以被当做一致的父类型来处理
	向上转型:
		定义一个父类的变量,用以引用子类的地址空间
		只能调用父类中定义的方法
	向下转型:
		强制转换,需要保证转型的安全
		Instanceof 判断运行期的类型
		对真实类型及其父类型判断,都得到true
	
抽象类abstract
	半成品的类,一个未完成的类
	抽象方法只有方法定义,没有方法代码
	需要用abstract关键词定义
		1.作为通用方法在父类中定义;
		2.要求子类必须完成该方法;
		3.抽象类不能实例化,未完成时半成品;具体子类可以创建实例;
		
	抽象要点
		被abstract修饰的类称之为抽象类,被abstract修饰的方法称之为抽象方法
		一个类中如果有抽象方法,这个类必须为抽象类
		抽象类不能实例化!!!
		抽象类必须要有一个子类,子类可以实现抽象类中的抽象方法.如果子类实现类的抽象方法,那么久可以通过向上造型来使用抽象类.
		final不能修饰抽象类,final修饰的类为最终类不能被继承,抽象类必须要被继承
		抽象类可以写构造方法的
		抽象类可以提供普通方法
		抽象类中的抽象方法可以重载
		抽象类中抽象方法不能使用private修饰,抽象方法必须被子类实现
		抽象方法不能被static修饰,静态方法可以直接使用类名调用,在抽象类中没有意义.
		受java的单继承的影响,抽象类不能够同时继承多个类
	
接口interface
	接口是功能的集合,接口是比抽象类更抽象的"类",在JDK1.8之前接口中只能放抽象方法.
	接口是特殊的类
	接口是结构设计共计,用来解耦合,隔离实现
	语法:
		Interface 代替class关键词
		implements代替extends关键词
		接口中只能定义:
			公开的常量
				//接口中是可以的定义变量,,
				Public  static  finalinta=5;
				//变量默认修饰符publicstaticfinal,实际上是一个常量
			公开的抽象方法
				Public   abstract  void  show();//接口中的方法默认修饰符public  abstract
				接口不能实例化,必须在implements中实现接口中的抽象方法
				接口中的方法可以重载
			公开的内部类,内部接口
		接口中没有构造方法
		类可以同时实现多个接口:
			Class A extends Object implements x,y,z{}
		接口之间继承,不用实现关键词(可以继承多个接口),用extends
			Interface A extends x,y,z{
			}
		
		一个类可以实现多个接口,子接口中可以有相同的方法(接口中只有方法名没有具体的实现代码)
		java中接口是网状
		java中继承是树状结构
		java放弃了对接口的编译检查
		Javap xxx.calss可以反编译
		
![](https://s1.51cto.com/images/blog/201908/18/6f444ec9c64b7cf101bdd778019c0d00.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)