java_DAY14:接口和抽象类
1:抽象类和普通类的区别
1:抽象方法介绍
当父类的某些方法不确定时,或者每一个子类都有不同的表现形式的时候,可以用abstract关键字来修饰该方法。
被abstract修饰,没有方法体的方法,就叫抽象方法,
特点:
1、抽象方法没有方法体,只有方法的声明
2、如果一个类中存在抽象方法,那么这个类必须要声明为抽象类
如果父类中有一个方法,每一个子类都有不同的实现,此时可以将这个方法声明为抽象方法,抽象方法是没有方法体的,只是一种规范。
Pet类中的toHospital() 方法不需要具体的实现,而且实现后没有任何意义,此时可以将Pet类中的toHospital()声明为抽象方法;
什么是抽象方法:被abstract修饰的方法,就是抽象方法。
1、抽象类为什么不能实例化?- 不能实例化,抽象类中可能会存在抽象方法,抽象方法是不完整的方法,没有方法体,如果被调用,完全没有意义
2、抽象类中是否可以存在构造方法? - 可以存在,他不能实例化,构造方法有什么用? -- 留给子类调用的
3、抽象类和抽象方法的关系? - 抽象方法必须在抽象类中进行声明,抽象类中可以存在抽象方法,也可以不存在
4、什么是抽象类? - 被abstract修饰的类就是抽象类,特点:不能实例化
5、抽象类能不能继承普通类? - 可以。
6、普通类能不能继承抽象类? - 可以
7、抽象方法和普通方法的的区别!
1、抽象方法没有方法体,普通方法一定要有方法体
2、抽象方法一定要有abstract修饰,普通方法一定不能有
3、抽象方法只能在抽象类中,普通方法既可以在抽象类中也可以在普通类中
4、被继承时,抽象方法必须要被子类重写,普通方法没有要求
8、抽象类和普通类的区别?
1、抽象类不能被实例化,普通类可以
2、抽象类需要有abstract修饰,普通类不能
3、抽象类可以有抽象方法,普通类一定不能存在抽象方法
9、是否存在抽象的构造方法? - 不存在,
10、是否存在抽象的静态方法? - 不存在
11、抽象类中是否存在静态方法? - 可以存在的,静态方法不需要对象来调用,直接通过类名既可以直接访问
12、关于继承,跟是否抽象无关,都可以互相去继承
语法:方法体,调用
特征:
1:抽象方法没有方法体,只有方法的声明;
2:如果一个类中存在抽象方法,那么这个类必须声明为抽象类;abstact修饰的类,抽象类不能创建对象
3:抽象类不能被实例化;
4:抽象方法必须在子类中被重写,除非子类也是抽象类;
如:
// 抽象类
public abstract class Pet{
//抽象方法
public abstract void toHospital();
2、抽象类和抽象方法的关系
1:有抽象方法的类,一定是抽象类,但抽象类不一定有抽象方法;
2:一个类继承抽象类,必须重写抽象类中的所有抽象方法,如果没有全部重写,那么子类必须声明为抽象类
3:没有抽象构造方法,也没有抽象静态方法
4:抽象类中可以有构造方法,创建子类的实例时调用
1、抽象类和普通类的区别 - 记住3条以上
1、语法不同,抽象类是被abstract修饰的类,普通类一定不能被abstract修饰;
2、抽象类中可以有抽象方法,普通类一定不能有抽象方法;
3、抽象类不能被实例化,普通类可以去实例化调用;- 创建对象
4、抽象类被继承时,子类必须重写全部的抽象方法,或者将子类声明为抽象类;普通类继承普通类的时候,没有任何限制;
2:接口
1:什么是接口
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合(接口中的所有的方法都是抽象方法),接口通常以interface来声明。
接口是一个特殊的类,这个类中只能存值抽象方法,为了和普通的类去做区分,同时弥补java单继承的缺陷,把这个特殊的类叫接口,使用interface声明接口
一个类通过实现接口的方式,从而来实现接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
2:接口的声明
声明接口的语法:
public interface MyInterface {
public abstract void eat(); // 接口中的所有方法都是抽象方法;
void run(); // 可以省略前面的修饰
3:接口的特点
1、接口不能用于实例化对象。
2、接口没有构造方法。
3、接口中所有的方法必须是抽象方法。默认为:public abstract
4、接口不能包含成员变量,除了 public static final 常量。
5、接口不是被类继承了,而是要被类实现。实现使用关键字:implements
6、接口支持多实现。
7、一个类可以继承一个类的同时实现多个接口。
3:使用接口
使用接口的步骤:
1、创建接口,声明方法
2、创建类,实现接口,实现接口中的方法
3、使用实现后的方法执行具体的操作
4:接口与抽象类的区别
1、抽象类使用关键字abstract class修饰,接口使用关键字interface;
2、抽象类使用关键字extends实现继承,接口使用implements来实现
3、抽象类中可以包含抽象方法和普通方法,接口中只能有抽象方法(1.7);
4、抽象类可以有构造方法,接口中不能有构造方法;
5、抽象类可以有成员变量,接口中只能有常量;
6、抽象类只能单继承,接口可以多继承;
7、抽象类里面的方法可以是public,protect,private,接口的方法只能是public;