2019年10月23日 日报

java

 今日内容:
	1.多态
	2.抽象类
	3.接口
	4.内部类
	多态
	!!!!!!!!!!父类不能直接调用子类独有的方法,但是可以访问父类自己多独有的方法.如果对于父子类都有的非静态方法,就编译时调用父类的方法,运行时调用子类的方法,如果是静态方法始终调父类
	基本概念
	多态主要是指同一种事物表现出来的多种形态.
	例子:
	饮料:可乐,雪碧,乐虎,红牛,脉动.......
	宠物:狗,猫,鸟,乌龟,鱼.......
	人:学生,老师,工人....
	语法格式:
	父类类型 引用变量名 =new 子类类型();
	如:Person pw=new Worker();
		 pw.show();
	解析:
	在编译阶段调用Person类中的show方法,在运行阶段调用worker类中重写以后的show方法.
	多态的效果:
	(1)当父类的引用指向子类的对象时,父类的引用可以直接调用父类独有的方法;
	(2)当父类的引用指向子类的对象时,父类的引用不可以直接调用子类独有的方法;
	(3)对于父子类都有的非静态成员方法来说,编译阶段调用父类版本,运行调用子类重写以后的版本
	(4)对于父子类都有的静态方法来说,编译和运行阶段都调用父类版本,因为他与对象无关,他隶属于类层级

	多态的意义:
	多态的实际意义在于可以屏蔽不同子类的差异性实现通用的编程,但可以调用不同的方法带来不同的结果.
	引用数据类型之间的转换:
	1.引用数据类型之间的转换分为:自动类新型转换和强制类型转换
	其中自动类型转换就是从小范围到大范围之间的转换,也就是子类到父类的转换
	其中强制类型转换主要指大范围到小范围之间的转换,也就是父类到子类的转换
	 
	3.若转换到的目标类型是子类类型但不是该引用真正指向的子类类型,则编译通过,然后运行阶段发生类型转换异常
	4.为了避免第三条的错误发生,可以使用instanceof关键字进行判断,具体格式如下:
	instanceof关键字:
	判断数据类型
	if(变量 instanceof 类型){
	代码;
	}else{
	代码;
	}


	抽象类(重点)
	抽象方法的概念:
	抽象方法就是指不能具体实现的方法,也就是没有方法体并使用一个关键字abstract关键字修饰
	语法格式:
	访问控制符 abstract 返回值类型 方法名称(形参列表);
	如:
	public abstract oid 方法名称();
	抽象类的概念:
	抽象类就是指,不能具体实例化的类,也就是不能创建对象并使用abstract关键字修饰
	抽象类为其子类"抽象"出了公共的部分,通常也定义了子类所必须具体实现的抽象方法,
	注意事项:
	1.抽象类中可以有成员变量,构造方法以及成员方法;
	2.抽象类中可以有抽象方法也可以没有抽象方法
	3.抽象方法只能在抽象类中定义,因为严格来说,有抽象方法并且使用abstract关键字修饰的类才是真正意义上的抽象类

	抽象类的实际意义:
	抽象类的意义不在于自身创建对象而在于被继承,当一个类继承抽象类后必须重写抽象类中的抽象方法,否则该类也变成抽象类.
	也就是说抽象类对于子类具有强制性和规范性,因此叫做模板设计模式.
	经验分享:
	在以后的开发中推荐使用多态的语法格式,当父类的引用指向子类的对象时,那么父类引用直接调用的所有方法一定是父类拥有的方法,若希望更换子类时,只需要将new关键字后边的内容进行修改,其他地方无需修改,立即生效,从而提高了代码的可维护性.
	缺点:父类引用不能访问子类独有的方法,若要访问则需要进行强制类型转换

	接口(重点)
	基本概念:
	接口就是一种比抽象类还抽象的类,体现为所有成员变量都是常量,所有成员方法都是抽象方法,
	定义类的关键字是class而定义接口的关键字shiinterface
	继承类的关键字是extendserect而实现接口的关键字是implements

	类和接口的关系:
	类和类之间是继承关系  使用extends关键字表达继承关系   支持单继承
	类和接口之间的关系      使用implements表达实现的关系    支持多实现,一个类可以实现多个接口
	接口和接口之间的关系   使用extends关键字表达继承关系   支持多继承

	注意:
	接口只能使用多态类的形式进行new对象(实例可见)
	抽象类和接口之间的区别(笔试简答题)
	1.定义抽象类的关键字是abstract class 定义接口的关键字是interface
	2.继承抽象类的关键字是extends,而实现接口的关键字是implements
	3.继承抽象类支持的是单继承,而实现接口可以多实现
	4.抽象类中可以有构造方法,而接口中不可以有构造方法
	5.抽象类中可以有成员变量,而接口中只可以有常量
	6.抽象类中可以有成员方法,而接口中只能有抽象方法
	7.抽象类中增加方法可以不影响子类,而接口中增加方法通常都影响子类
	8.在jdk1.8开始允许接口中出现非抽象方法,但是需要使用default关键字修饰


	匿名内部类(重点)
	基本功能:
	抽象类和接口不能new对象,我们就用匿名内部类就可以得到抽象类和接口的一个对象
	语法格式:
	接口/父类类型 引用变量名 = new 接口/父类类型(){方法的重写};
	经验分享:
	当接口类型的引用作为方法的形参时,实参的传递方式有两种:
	1.自定义类实现接口然后创建该类的对象作为实参传递(代码会调用很多次时,使用)
	2.使用匿名内部类的语法格式来得到接口类型的引用,作为实参传递(代码使用一次后就不用了,使用)
	 
	笔试题:
	abstract关键字和final关键字不能同时存在,因为abstract主要是用于继承的而final是终止继承
	abstract关键字和static关键字不能同时存在,因为abstract主要用于继承的而static只能应用于本类
	abstract关键字和private关键字不能同时存在,因为private因为abstract主要用于继承的而private关键字是私有的,不能被继承