抽象类与接口的区别:
A:成员区别:
抽象类:
成员变量:可以是变量,可以是常量
构造方法:有
[作用:子类创建对象时对父类数据进行初始化]
成员方法:可以抽象,也可以是非抽象
接口:
成员变量:只可以是常量
成员方法:只可以是抽象的
B:关系区别:
类与类:
继承关系,只能单继承,可以多层继承
类与接口:
实现关系,可以单实现昂,可以多实现,可以继承一类的同时事项单个或多个接口
接口与接口:
继承关系,可以多继承,可以单继承
C:设计理念的区别★★★★★:
抽象类: 被继承的体现:"is a"的关系,谁是谁的一种.
抽象类中是定义的是该继承体系的共性功能.
接口: 被实现的关系:"like a"的关系,什么像什么.
接口中定义的是该继承体系的扩张功能.
猫狗案列,加入跳高的额外功能
分析:
从具体到抽象
猫:
姓名,年龄
吃饭,睡觉
狗:
姓名,年龄
吃饭,睡觉
由于有共性的功能,所以我们抽取出一个父类:
动物:
成员变量:姓名,年龄
成员方法:吃饭(){},睡觉(){}
猫,狗继承动物
跳高是一个新的扩张功能,所以我们定义一个接口.
接口:
跳高
部分猫实现跳高
部分狗实现跳高
实现:
从抽象到具体
public class 接口text {
public static void main(String[] args) {
//定义一个跳高猫
JumpCat j = new JumpCat();
j.setAge(3);
j.setName("哆啦A梦");
System.out.println(j.getName()+"----"+j.getAge());
j.eat();
j.sleep();
j.jump();
System.out.println("---------------------------------------");
JumpCat j2 = new JumpCat("加菲猫",4);
System.out.println(j2.getName()+"----"+j2.getAge());
j2.eat();
j2.sleep();
j2.jump();
}
}
// 定义跳高接口:
interface Jumpping {
// 跳高功能
public abstract void jump();
}
// 定义抽象类
abstract class AnimalD {
private String name;
private int age;
public AnimalD() {
super();
// TODO Auto-generated constructor stub
}
public AnimalD(String name, int age) {
super();
this.name = name;
this.age = age;
}
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;
}
//吃饭
public abstract void eat();
//睡觉
public void sleep(){
System.out.println("睡觉");
}
}
//具体类的猫
class CatD extends AnimalD{
public CatD(){}
public CatD(String name,int age){
super(name,age);
}
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
//具体类的狗
class GogD extends AnimalD{
public GogD(){}
public GogD(String name,int age){
super(name,age);
}
@Override
public void eat() {
System.out.println("狗吃肉");
}
}
//有跳高功能的猫
class JumpCat extends CatD implements Jumpping{
public JumpCat() {
// TODO Auto-generated constructor stub
}
public JumpCat(String name , int age){
super(name,age);
}
@Override
public void jump() {
System.out.println("跳高猫");
}
}
//有跳高功能的狗
class JumpGog extends CatD implements Jumpping{
public JumpGog() {
// TODO Auto-generated constructor stub
}
public JumpGog(String name , int age){
super(name,age);
}
@Override
public void jump() {
System.out.println("跳高狗");
}
}