java抽象类与接口的异同点

一、抽象类*

在了解抽象类之前,需要先了解一下抽象方法。

abstract void fun();

抽象方法需要用abstract来修饰,在有了抽象方法,这个类就可以成为抽象类,也同样需要用abstract来修饰。

接下来看一下抽象类的示例。

对于人类来说,用人类这一个类来描述人类就会比较抽象,只能够描述每一个人都共有的特点而不能更加具体的描述人,所以可以将Peoploe作为一个抽象类,而通过Student和Teacher这样的子类来创建对象。

abstract class People{
	String name;
	int age;
public People(String name,int age){
	this.name = name;
	this.age = age;
}//抽象方法
public abstract void talk();
}

class Student extends People{
public Student(String name,int age){
//子类构造方法通过super()调用父类的构造方法
super(name, age);
}
public void talk() {
System.out.println(“学生—>姓名:”+this.name+,年龄”+this.age);
}
}

class Teacher extends People{
public Teacher(String name,int age){
	//子类构造方法通过super()调用父类的构造方法
	super(name, age);
}
public void talk() {
	System.out.println(“老师—>姓名:”+this.name+,年龄”+this.age);
}
}

public class Demo{
	public static void main(String[] args) {
	Student stu = new Student(“dove”, 22);
	Teacher tea = new Teacher(“wang”, 32);
	stu.talk();
	tea.talk();
	}
}

结果:
学生—>姓名:dove,年龄22
老师—>姓名:wang,年龄32

二、接口

接口在java中是一个抽象类型,是抽象方法的集合。一个类通过继承接口的方式,从而继承接口的抽象方法。
下面来看一下接口的示例
通过interface定义了两个接口Fly和Bite,通过Bat类来实现这两个接口

public interface Fly {
	public final int speed=1;
	public abstract void fly();
}
public interface Bite {
	public abstract void bite();
}
public class Bat implements Fly ,Bite {
	@Override
    public void bite() {
        System.out.println("咬");
    }
    @Override
    public void fly() {
        System.out.println("飞");
    }
    public static void main(String[] args) {
        System.out.println(Fly.speed);
    }

}

接口中的所有成员变量都默认是由public static final修饰的。

接口中的所有方法都默认是由public abstract修饰的。

三、异同

抽象类与接口的相同点:

1.两者都不能实例化

2.抽象类的子类必须重写抽象类中的全部抽象方法,接口的实现类也必须实现
接口中的全部抽象方法,只有这样抽象类的子类和接口的实现类才能够实例化

抽象类与接口的不同点:

1.抽象类中可以有普通方法,而接口中只有抽象方法

2.抽象类中可以有普通变量,而接口中只能是公共的静态的常量

3.接口要实现,抽象类要继承,一个类可以实现多个接口,但只能继承一个抽象类

4.抽象类与子类更多是“is-a”的关系,而接口与实现类更多是“has-a”的关系。

四、小结

 虽然两者在语法上存在着不小的差别,但是使用接口也能够实现和抽象类一样的
 操作,当子类和父类之间存在有逻辑上的层次结构时,推荐使用抽象类;当用于
 不同类之间,定义不同类之间的通信规则,希望支持差别较大的两个或者更多对
 象之间的特定交互行为时,应该使用接口。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值