1. 区别
1.1 成员区别
抽象类
- 成员变量:可以变量,也可以常量
- 构造方法:有
- 成员方法:可以抽象,也可以非抽象
接口
- 成员变量:只可以常量
- 成员方法:只可以抽象
1.2 关系区别
类与类
- 继承,单继承
类与接口
- 实现,单实现,多实现
接口与接口 - 继承,单继承,多继承
1.3 设计理念区别
- 抽象类:被继承体现的是:
"is a"
的关系。抽象类中定义的是该继承体系的共性功能
。 - 接口:被实现体现的是:
"like a"
的关系。接口中定义的是该继承体系的扩展功能
。
2. 案例演示
- 动物类: 姓名,年龄,吃饭。
- 猫和狗
- 动物培训接口:跳高
2.1 抽象类
public abstract class Animal {
private String name;
private int age;
public Animal() {}//空参
public Animal(String name,int age) {//有参
this.name = name;
this.age = age;
}
public abstract void eat();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2.2 接口
public interface Jumping {
public void jump();
}
2.3 猫类
public class Cat extends Animal{
public Cat() {}
public Cat(String name,int age) {
super(name,age);
}
public void eat() {
System.out.println("猫吃鱼");
}
public void catMouse() {
System.out.println("抓老鼠");
}
}
2.4 狗类
public class Dog extends Animal{
public Dog() {}
public Dog(String name,int age) {
super(name,age);
}
public void eat() {
System.out.println("狗吃肉");
}
public void lookHome() {
System.out.println("看家");
}
}
2.5 跳高猫
public class JumpCat extends Cat implements Jumping{
public JumpCat() {}
public JumpCat(String name,int age) {
super(name,age);
}
@Override
public void jump() {
// TODO Auto-generated method stub
System.out.println("我跳的老高了! ");
}
}
2.6 测试
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Cat cat = new Cat("加菲",8);
System.out.println(cat.getName()+"........"+cat.getAge());
cat.eat();
cat.catMouse();
Dog dog = new Dog();
System.out.println(dog.getName()+"........"+dog.getAge());
dog.eat();
dog.lookHome();
JumpCat jumpCat = new JumpCat("跳高猫",10);
jumpCat.jump();
}
}