首页 > 代码库 > javaSE中抽象类以及接口概述
javaSE中抽象类以及接口概述
一丶抽象类
1 关键字abstract(可以修饰类和方法)
(1)abstract修饰方法(抽象方法)
a.没有了方法体; egg:public abstract void show();
b.抽象方法只保留方法的功能,子类必须重写此方法。
(2)abstract修饰类(抽象类)
a.有抽象方法的类必须定义为抽象类,抽象类中可以有抽象方法,也可以有非抽象方法;
b.有构造器,但抽象类不可被实例化,可以通过抽象类的多态来间接对创建对象。
egg:
abstract class A{ //抽象类
public abstract void show();
}
class B extends A{
@Override
public void show(){
System.out.println("这是子类重写的父类抽象方法");
}
}
public class Test(){
public static void main(String[] args){
A a = new B();
a.show(); //这是子类重写的父类抽象方法
}
}
(3)不能与abstract共存的关键字(对于抽象方法来说)
a.private:有冲突 private私有的 不能被子类继承,但是被abstract修饰的抽象方法需要子类对其重写;
b.final:有冲突 final最终的 修饰方法其方法不能被重写;
c:static:无意义 static静态的 被static修饰的方法可以直接通过类名.方法访问,而被abstract修饰的抽象方法没有方法体。
2 抽象类的子类的特点
其子类可以是抽象类,也可以是非抽象类;通过继承(extends)父类重写抽象方法,去使用自己的功能
子类是抽象类:没有任何意义,因为抽象类不能直接实例化,就不能调用方法;
子类是非抽象类:子类必须重写抽象类中所有的抽象方法,抽象类要创建对象必须通过子类来实现。
二丶接口(interface)
1 定义(接口不是类,与类是并列关系)
接口可以看作是一个特殊的抽象类,是常量与抽象方法的集合。
格式:
interface 接口名{
}
2 特点
a.接口成员变量:必须是常量;默认由 public static final 修饰;
b.接口的成员方法:必须是抽象方法;默认由 public abstract 修饰;
c.接口没有构造器,不能实例化,可以通过接口的多态间接创建对象;
d.接口定义的就是一种功能,比如学生和老师中有一部分人会说英语 此时学生 和老师定义为类,说英语就可以定义为一个接口,被类实现(implements);
e.实现接口的的类,必须要重写其中的所有方法;
f.类可以继承一个类同时实现多个接口;
g.接口与接口之间是继承关系,而且可以多继承。
egg:
abstract class A{}
interface B1{}
interface B2{}
interface B3{}
interface B4 extends B2,B3{}
class C extends A implements B1,B2,B3,B4{}
三丶抽象类与接口的区别
1 成员的区别
抽象类: 成员变量:可以是变量,也可以是常量;
成员方法:可以有抽象方法,也可以有非抽象方法,其子类需重写其抽象方法;
构造方法:有自己的构造方法 有参/无参。(凡是类都有构造器)
接口:
成员变量:默认被 public static final 修饰,必须是常量,可以通过 接口名.变量名 的方式之间访问;
成员方法:默认被 public abstract 修饰, 必须是抽象方法,其子实现类必须重写其所有方法;
构造方法:没有构造器
2 关系的区别
类与类:单继承
接口与接口:多继承
类与接口:多实现
注意:一个类继承一个类的同时还可以多实现多个接口。
3 设计理念的区别
抽象类: 是类的一种,他可以当成一种、一类抽象事物;
接口: 区别与类,与类并列,是一种功能的体现。
egg:教练和运动员案例
乒乓球运动员和篮球运动员。
乒乓球教练和篮球教练。
为了出国交流,跟乒乓球相关的人员都需要学习英语。
请用所学知识:
分析,这个案例中有哪些抽象类,哪些接口,哪些具体类
方案:
javaSE中抽象类以及接口概述