一、抽象类
抽象方法:使用关键字
abstract
修饰,并且没有方法体,直接以;
结尾的方法将子类的共性方法抽取到父类,而父类针对这个方法无法描述每个子类的具体实现时,这种方法就是抽象方法。
注:
1.抽象方法所在的类必须是抽象类
2.抽象类不能被实例化
3.子类继承类抽象类,必须重写父类中的所有抽象方法,否则子类也是抽象类
4.抽象类中可以有构造函数
5.抽象类中可以有非抽象方法
6.抽象类中可以没有抽象方法
7.抽象类一定是一个父类
抽象类的使用步骤:
1.创建子类继承抽象类
2.重写抽象类的所有抽象方法
3.创建子类对象调用
匿名对象:创建对象时,不指定数据类型和引用变量名
好处:方便
弊端:同一个匿名对象只能使用一次
匿名内部类:
new 类名(){ //重写 }.方法();
注:
作用是创建指定的子类对象,且如果父类有多个抽象方法时子类需要重写所有父类的抽象方法,并且调用方法时只能调用一个方法。
二、关键字final
final关键字可以用来修饰:
final可以修饰的有:
1.变量:变量的值不能改变
2.方法:方法不能被重写
3.类:类不能被继承
三、关键字static(静态)
static关键字可以用来修饰:
1.变量:如果这个变量是类中所有对象的共享属性时,可以修饰成static
2.方法:一般工具类的方法都是静态的
3.代码块:
注:
⭐静态成员随着类的加载而加载
1.static只能修饰成员,不能修饰局部
2.static修饰的成员属于整个类的所有对象,是类中所有对象的共享内容,不属于某个对象3.static成员应该通过类名访问
4.静态方法只能调用静态成员和方法,不能调用非静态成员和方法;非静态的方法可以调用静态成员和方法也可以调用非静态成员和方法(静态内容早于非静态的内容进入内存)
5.静态方法中不能使用
this
和super
(一般用在工具类中)6.静态方法不能被重写,父类中的静态方法可以用父类名和子类名调用
静态常量:被
public static final
修饰的变量不能同时使用的关键字:
final 和 abstract
,private 和 abstract
,
static 和 abstract
四、接口
4.1、关键字:interface
概念:接口是一种特殊的类,接口在编译之后也生产
.class
文件,接口中的方法全部都是抽象方法,它是一个比抽象类更加抽象的一种类型格式:
public interface 接口名{ }
好处:
1.扩展了功能
2.对外提供了规则
注:
1.接口不能创建对象
接口中成员的特点:
1.成员变量:默认被
public static final
修饰2.成员方法:默认被
public abstract
修饰
4.2、接口的使用步骤:
关键字:
implements
1.创建实现类来实现接口
格式:public interface 接口名{ } public class 实现类 implements 接口名{ }
2.实现接口中的所有抽象方法
3.创建实现类对象进行调用
4.3、类与接口的关系
类和类的关系:继承,子类继承父类
public class 子类 extends 父类{ }
注:类与类之间只有单继承
类与接口的关系:实现,实现类实现接口
public class 实现类 implements 接口名{ } public class 子类 extends 父类 implements 接口1,接口2,接口3...{ }
注:
1.一个类可以实现多个接口
2.子类在继承父类的同时还能实现接口
接口与接口的关系:继承,子接口继承父接口
public interface 子接口 extends 父接口1,父接口2...{ }
注:接口之间可以多继承,类不能多继承(子接口可以继承多个父接口)
4.4、接口中的新特性
1.默认方法(非抽象方法)
关键字:
default
从JDK1.8开始,接口中允许定义非抽象方法
public default 返回类型 方法名(参数列表){ 方法体 }
注:
1.接口中的默认方法可以不重写,如果重写时不能使用
default
2.实现类实现的多个接口中有同名方法,那么实现类就必须重写
3.实现类中调用接口的默认方法:
接口名.super.方法名()
4.子类继承父类的同时实现接口,父类中的非抽象方法和接口中的默认方法重名时,子类可以不重写,子类对象调用时优先访问父类中的(就近原则)
2.静态方法
从JDK1.8开始,接口中允许定义静态方法
public static 返回类型 方法名(参数列表){ 方法体 }
注:接口中的静态方法只能由接口名调用
3.私有方法
从JDK1.9开始,接口中运行定义私有方法
private 返回类型 方法名(参数列表){ 方法体 }
接口中私有方法的意义:那些只对接口中的默认方法进行支持,又不需要对外暴露的方法就应该是私有的
4.5、抽象类和接口的区别(异同)
同:
1.都不能实例化
2.都需要子类(实现)来继承(实现)
3.都可以有抽象方法
异:
1.类(抽象类)只能单继承,接口可以多继承
2.抽象类中的成员变量与普通类的成员变量相同;接口中的成员变量都是静态常量
3.抽象类中除了抽象方法其他方法都与普通方法相同;接口中的成员方法都是抽象方法
4.抽象类中有构造函数;接口中没有构造函数
5.抽象类是一类事物的集合;接口是功能的集合