一.类/抽象类/接口的关系.
类表示一个实体的类,这是主要干活的类;
抽象类表示干了一部分活的类,也就是实现了一部分方法,但是一部分方法没有实现,需要消费者自己定义实现的类.
接口:表示只定义了需要干什么活,但是自己不干活,也就是只定义了方法,但是没有方法实现.
二.抽象类
1.格式:在class前面加上关键字abstract关键字.例如
//抽象类
public abstract class TestAbstract {
//具体方法
void say() {
System.out.println("hello");
}
}
2.注意:抽象类不一定有抽象方法,但是有抽象方法的类必须是抽象类或者接口.
//实体类中有抽象方法,则会报错.
class TestAbstract2{
abstract void say();//抽象方法的类必须是抽象类,不然会报错,这里报错了
}
3.实体类继承抽象类,必须实现其父类的全部抽象方法
public abstract class TestAbstract {
//具体方法
void say() {
System.out.println("hello");
}
abstract void hello();
}
class TestAbstract3 extends TestAbstract{
@Override //重写抽象方法
void hello() {
System.out.println("hello");
}
}
4.抽象方法的格式:
4.1在方法修饰符之后,返回值之前加上关键字abstract,
4.2并且抽象方法没有方法体.
public abstract void hello();
三.接口
1.接口的意义:
.接口表示一种规范,我们常说的API接口的意思就是定义好方法,具体的实现由各个厂商或者个人去实现,java中的常用接口规范有,jdbc,jwt,jms,
2.接口的格式:
2.1 用关键字interface表示,修饰接口的修饰符只有三个public default 和abstract
2.2 接口中的属性默认用 public static final修饰,所以接口中的属性必须声明时指定值,并且可以直接接口名.属性名获取.
2.3 接口的方法默认有abstract修饰,并且只有两种修饰符,一种是public,一种是default.如果实在要在接口中写方法实现,有两种方式,第一种添加default,第二种添加static静态方法.
public interface TestInterface {
//默认为 public static final int a = 1;
public int a=1;
/*
* 这是抽象方法,没有方法体,默认为public abstract 修饰
* 如下三种形式一种的.
*/
void say();
void say2();
public abstract void say3();
/*
* 这是接口的方法的默认实现
*/
default void sing() {
}
public default void sing2() {
//这里可以证明接口中的成员属性默认用 public static final修饰
int b = TestInterface.a;
}
/*
* 这是静态方法,必须要有方法实现.
*/
static int sum(int a,int b) {
return a + b;
}
}
3.接口的实现
3.1 java中接口时多实现,单继承的,实现接口用关键之impleaments.
3.2 一个类实现一个接口,必须实现其全部的抽象方法.
//单继承,多实现
class InterfaceDemo extends Person implements TestInterface,Serializable{
@Override
public void say() {
// TODO Auto-generated method stub
}
@Override
public void say2() {
// TODO Auto-generated method stub
}
@Override
public void say3() {
// TODO Auto-generated method stub
}
@Override
public void eat() {
// TODO Auto-generated method stub
}
}