抽象类
1:用abstract修饰类为抽象类;
2:抽象类中的抽象方法只有声明部分,没有具体的方法,
public abstract void breath();
3:只要含抽象方法的类都必须为抽象类,即必须用abstract修饰
4:抽象类不能直接被实例化,即用new创建对象
5:抽象类中可以没有abstract方法(为了强迫使用者必须通过继承来使用这个类)
6:类中包含了abstract方法,则这个“类”一定是abstract类,即有抽象方法的类一定是抽象类。
7:抽象类的子类必须实现抽象类中的所有抽象方法,否则子类也必须是抽象类。
8:抽象类中的抽象方法是多态的一种表现形式。
抽象类与普通类的区别
抽象类前面由abstract修饰,而普通类没有。
抽象类不能创建对象,普通类可以创建对象。
抽象类中可以有抽象方法,普通类中一定没有抽象方法;
接口
1:一般形式如下:
访问权限控制符 interface 接口名 [extends 接口列表] {
常量;
抽象方法;(JDK8以前只能有抽象方法JDK8及以后可使用default和static修饰的方法以及Object内的抽象方法)
内部类;
}
注:抽象方法中的public abstract可以省略
public interface Ijiekou{
public abstract void breath();
// double pi = 3.14;
String GONGBEN="学习使我快乐";
//public Ijiekou() {}接口中不能有构造方法
//JDK8及以上可支持:
public default void walk(){
System.out.println("开学了");
}//默认方法,默认实现类调用
public static void study() {
System.out.println("大学开学了");
}//该方法将由接口或其实现类直接调用
//当只有一个抽象方法或Object里的抽象方法时该类成为函数式接口,用@FunctionInterface验证
int HarshCode();//Object内的
}
2、接口内只能包含常量(public static final)、抽象方法及内部类。
3、接口中的抽象方法必须为public访问权限控制符,不能为其它控制符。
4:通过extends关键字可以使自定义的接口实现继承,但需要注意以下两点:
(1)接口只能继承父接口,不能继承抽象类和普通类。
(2)接口弥补了Java单一继承的缺点(Java中的类只能继承一个父类),即接口可以继承多个父接口,它们之间用英文逗号隔开。
接口的实现
普通类类通过implements实现接口
public class Chouxiang implements Ijiekou,Ijiekou1{
//可继承多个接口,以逗号间隔
public void breath() {
System.out.println("可以呼吸");
}
特点
1、如果一个类实现了一个接口,但没有实现接口中的所有抽象方法,那么这个类必须是abstract类。
2、如果多个接口中定义了相同的抽象方法,则在实现类中只实现其中一个即可;
3、接口实现类可以直接使用接口中的常量,实现类调用多个接口中相同常量时必须用接口名指定常量来源
接口回调
1、接口声明的变量指向其实现类实例化的对象,那么该接口变量就可以调用接口中的抽象方法
2、接口没有构造方法,不能创建自己的对象,但是可以引用实现类的对象。
3、instanceof运算符
instanceof运算符用于判断该运算符前面引用类型变量指向的对象是否是后面类,或者其子类、接口实现类创建的对象。如果是则返回true,否则返回false
示例:
System.out.println(new Chouxiang() instanceof Ijiekou);