详述抽象类与接口区别

一、抽象类

   实际上,在多态中父类方法的方法体是多余的,所以父类中被子类重写的方法没有必要有方法体,这是因为父类中被子类重写的方法没有实质作用。

   此时可以删去多态中父类方法的方法体,并用abstract修饰父类及其方法,这时这个父类就成为了抽象类。

例如:

public abstract class Mammal{

	public abstract void move();
	
}

在Java中被abstract修饰的类为抽象类,被其修饰的方法为抽象方法。

特点:

1、抽象类中不能通过使用new关键字来创建该抽象类的对象


public abstract class Mammal{

	public abstract void move();
	new Mammal();
}

此时会报错

2、仍然存在构造方法

3、如果一个类没有重写完父类中所有的抽象方法,则该类必须为抽象类

4、抽象类中可以没有抽象方法,但有抽象方法的类一定是抽象类

与普通类的区别:

1、抽象类前面有abstract修饰,普通类没有

2、抽象类不能创建对象,普通类可以

3、抽象类中可以有抽象方法,普通类中一定没有抽象方法

注意:抽象类中不能包含被static修饰的静态抽象方法(抽象方法没有方法体);

二、接口

   接口可以定义为抽象方法的集合,如果一个抽象类中都是抽象方法,可以将这个类定义为接口

   格式如下:

权限访问控制符 interface 接口名 [extends 接口列表]{
	常量;
	抽象方法;
	内部类;
}

接口中的变量默认被public static final修饰(常量),即:接口中只能存在常量,抽象方法(默认由public abstract修饰)

接口的继承:

可以通过extends关键字实现接口的继承,但要注意:

--接口只能继承父接口,不能继承抽象类和普通类

--接口弥补了Java类中只能继承一个父类的缺点,接口可以继承多个父接口,即:接口之间的继承为多继承


public interface IA{
	
}
public interface IB{
	
}

public interface IMammal extends IA,IB{

	public abstract void move();

}

接口的实现:

类可以通过implements关键字实现接口,虽然Java类中只能单继承但可以实现多个接口。

访问控制符 修饰符 class 类名 implements 接口1[,接口2……]{
	变量
	方法
}

特点:

1、接口中的变量为常量

2、只有public和默认能修饰接口(类也是如此)

3、接口中的抽象方法访问权限必须是public

4、如果一个类实现了一个接口,但没有实现接口中的所有方法,那么这个类必须是abstract类

5、如果多个接口中定义了相同的抽象方法,则在实现类中只实现其中一个即可


public interface IA{
	double area();
}
public interface IB{
	double area();
}

public interface IMammal extends IA,IB{

	public abstract void move();

}

6、接口中不存在构造方法

7、实现接口的同时可以继承接口中常量;实现类所实现的多个接口中若出现常量重名的现象,则在实现类中不能直接使用,必须使用接口名来调用

注意:

--接口命名一般以“I”开头;

抽象类与接口区别

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值