在Java中,一个没有方法体的方法叫做抽象方法,该类必须定义为抽象类
public abstract class animals{
public abstract void eat ();//不包含方法体,注意代码中出现了两次abstract这一关键词
}
抽象类不是具体的,因此不能创建对象
抽象类的特点
在定义抽象方法时,方法和类都必须用abstract来修饰
抽象类里面也可以没有抽象方法
可以利用多态来进行创建对象
public class cat extends animals {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
public abstract class animals {
public abstract void eat();
public void action(){
System.out.println("睡觉");
}
}
public class test {
public static void main(String[] args){
animals cat = new cat();
cat.eat();
cat.action();
}
}
子类要写完继承的抽象父类的所有抽象方法
抽象类的子类要么完成以上步骤,要么把自己也定义为有一个抽象类
抽象类的成员特点
抽象类里面可以有构造方法,构造方法用于子类访问父类的初始化
抽象类里面也可以有成员方法
父类的抽象方法限定子类必须做某些事情
抽象类中可以有成员变量,可以是变量也可以是常量(final修饰)、
接口
理解接口可以与插座类别以加深理解
接口是一种公共规范标准,只要符合标准,大家都可以通用
Java接口更多体现在对行为的抽象
接口的特点:
具体类多态几乎不用
接口的成员特点
接口中的成员变量默认就是被final修饰的,因从接口中不存在变量
可以 直接通过接口名访问接口中的成员变量
接口里面不能有构造方法
如果说一个类没有父类,那么object就是它的父类
object类里面只有一个无参构造方法
所有的类都直接或者间接地继承着object这个类
因此就算父类中没有构造方法,子类中调用构造方法时也是可以的
public class interimpl implements inter {//等价于public class interimpl extends Object implements inter
}
注意object开头的o是大写
接口里面的成员方法只能是抽象的,且子类中要重写
接口里面的方法默认带了public abstract 这一修饰符
接口里面的方法可以直接如下
void show();
接口多态和抽象类多态只能调用自己本身有的方法,如果只有子类中有,那么就不能调用
类与接口的关系
类与类的关系
继承关系,只能单继承,但是可以多层继承
类与接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类时实现多个接口
public class interimpl implements inter1 , inter2 , inter3{
}
接口和接口关系
继承关系,可以单继承,也可以多继承
public interface inter1 extends inter2 , inter3 , inter4{
}
抽象类与接口的区别
抽象类成员:变量 常量 构造方法 抽象方法 非抽象方法
接口成员:常量 抽象方法
设计理念的区别:
抽象类是对类抽象,包括属性和行为
接口对行为抽象,主要是行动