一、抽象类
抽象+类------>把类进行一个抽象类似于是对象的抽象和总结
换句话说抽象类可以作为一些类的模板
类是对象的一个抽象,我们也知道类里面有属性、行为,这些属性和行为都是具体---抽象--->把类中的行为进行抽象即抽象后的行为是一个准则一个概括,具体的实现是根据情况而定
类(具体的)------抽象类(具体+准则)
准则:对一个行为的抽象即对方法的抽象
程序结构:
abstract class 抽象类类名{
属性;
具体方法;
抽象方法;
}
刚才我们讲过抽象类可以理解为是对类的一个抽象,对此抽象不能直接去实例化,需要通过其他类来实现即我们需要其他类通过extends关键字去继承抽象类
总结:
1、抽象类是对类的一个抽象
2、抽象类自身不能直接被实例化,它需要通过其他类去继承它
3、其他类继承了抽象类以后需要重写里面的抽象方法
4、抽象类对于抽象方法不是必须的即抽象类中即可以有抽象方法也可以没有
5、抽象方法就是指使用了abstract关键字所修饰的方法,并且没有方法体
1.1抽象方法
抽象方法没有方法体
抽象方法通过abstract关键字修饰
抽象方法的权限修饰符不能为private
抽象方法不能使用static关键字和final关键字
1.2那些类可以去继承抽象类
1.2.1普通类
普通类去继承抽象类以后,必须要实现抽象类里面的抽象方法
1.2.2抽象类
一个抽象类去继承另外一个抽象类的时候,可以不用去实现里面的抽象方法
补充:抽象类不能使用final关键字
面试题:
1、抽象类和接口的区别
2、普通类和抽象类的区别
3、抽象方法
二、接口
接口------>usb接口------->扩展
在Java中接口就是指定义了众多抽象方法的一个特殊类
程序结构:
interface 接口名{
public static 常量
public类型的抽象方法
}
类(具体)------抽象类(具体+准则)------接口(准则)
接口的使用:
接口本身不能被实例化,它需要第三方类通过implements关键字去实现
需要注意的是接口的实现是多实现的即一个类可以实现多个接口,这在一定程度上弥补了Java单继承
一个类去实现了接口以后就必须实现接口里面的全部抽象方法
几个问题:
1、哪些类可以实现接口
接口可以由抽象类和普通类去实现,其中抽象类实现接口以后不用去实现接口中的抽象方法
扩展:一个类即可以去继承一个抽象类同时还可以去实现接口,但是extends关键字必须在implements前面
2、接口中必须要定义抽象方法吗
不一定,接口通常是用于定义静态常量和抽象方法,但是对于抽象方法的定义在接口中不是必须的
例如:Serializable接口就是一个标识接口里面没有定义任何成员
3、JDK8关于接口的新特性
在JDK8及以后可以在接口中除了可以定义抽象方法外还可以定义public static类型或者public default类型的具体方法
三、内部类
内部+类------>定义在类或者方法里面的类
问题:为什么要有内部类
有的时候我们在类里面描述的数据过于复杂的时候我们可以考虑使用类,但是我又只想让这个类被自己使用
内部类就是指将类作为一个类中成员
1、成员内部类:
成员内部类的地位和成员变量是一样的
成员内部类是定义在类中方法外
2、静态内部类
静态内部类就是在成员内部类的基础之上加了static关键字
3、局部内部类------使用频率最低
局部内部类定义在方法中
局部内部类的地位和局部变量是类似的
局部内部类和局部变量一样不能使用protected、private、public、static等关键字
4、匿名内部类
匿名内部类其实就是抽象类和接口的另外一种实现方式