详述抽象类与接口的区别

  • 抽象类
  • 为什么需要抽象类?在多态中父类方法的方法体是多余的,即永远不会被执行。于是出现了抽象方法。抽象类中的抽象方法是多态的一种表现形式。
  • 是什么?没有方法体的方法为抽象方法 abstract修饰;类中含有抽象方法,则该类必须为抽象类,即abstract修饰所修饰的类。
  • 特点:1.类中含有抽象方法,则该类必须为抽象类,即abstract修饰所修饰的类。2.抽象类中可以没有抽象方法(abstract方法),可以有具体方法,但是一旦类中包含了abstract方法,则这个“类”一定是abstract类,即有抽象方法的类一定是抽象类。abstract修饰的方法叫做抽象方法。3.抽象类不能创建对象(抽象类不能被直接实例化)。4.抽象类中的方法必须有子类实现,抽象类的子类必须实现抽象类中的所有抽象方法,否则子类也必须是抽象类,一个至少要有一个非抽象类的子类。5.抽象类中可以有具体的方法。6.抽象类虽然不能创建对象但是可以定义构造方法,该方法用于子类调用。 7.抽象类不能有final修饰,否则其中的抽象方法将永远无法实。8.   抽象方法只有声明部分,而没有具体的方法体。abstract类只关心它的子类是否具有某种功能,并不关心其自身功能的具体行为,功能的具体行为由子类负责实现。
  •  
  • 抽象类与普通类区别:抽象类前面由abstract修饰,而普通类没有。 抽象类不能创建对象,普通类可以创建对象。 抽象类中可以有抽象方法,普通类中一定没有抽象方法。
  • 接口
  • 为什么需要接口?抽象类中可以包含任意合法的方法,可以包含任意合法的成员变量,如果一个抽象类中只有抽象方法,则该抽类可以定义为接口。
  • 怎么做?使用interface定义接口;实现类通过implements关键字实现该抽象类中的抽象方法。
  • 特点:1.一个类没有实现完接口中所有方法,则该类必须定义为抽象类 。 2.接口不能创建对象,且接口中没有构造方法。 3.接口名常常以I开头。4.接口中抽象方法默认为public abstract ,所以接口中定义抽象方法时可以省略public abstract ;且只能是public。5.抽象类中可以定义任意合法的成员变量,但是接口中只能定义public static final常量。6.JDK8以前版本的JDK中,定义的接口只能含有常量和抽象方法;JDK8+以后的版本可以定义多个default或者static具体方法。7.Java中类只能继承一个父类,但是Java中接口可以继承多个接口,每个接口之间使用逗号隔开。
  • Java接口是抽象方法的集合,接口名的命名规则和类名的命名规则相同。
  • 命名规则:  访问权限控制符 interface 接口名 【extends 接口列表】{                                                                                                                          常量:                                                                                                                                                                                          抽象方法;                                                                                                                                                                                  内部类;                                                                                                                                                                        }
  • 接口名的命名规则和类名的命名规则相同。
  • 接口中的抽象方法必须为public访问权限控制符,不能为其它控制符。
  • 接口只能继承父类接口,不能继承抽象类和普通类,通过implements关键字实现接口,其语法如下:                                                              访问控制符  修饰符  class  类名  implements  接口1  [,接口2, ……] {                                                                                                        变量;                                                                                                                                                                                            方法;                                                                                                                                                                              }
  • 接口实现类可以直接使用接口中的常量,但如果接口实现类所实现的多个接口中有常量名相同的常量,则在实现类中不能直接使用,必须使用类名来确定到底调用哪个接口中的常量。

 

  • 抽象类与接口区别:

1.定义时关键字的区别:抽象类关键字为abstract;接口为Interface

成员变量:抽象类成员变量可包含任意合法成员变量(包括各种访问级别的类成员变量和实例成员变量);接口类成员变量只能包含公开静态常量(默认由public static final修饰)。

2.构造方法:抽象类有构造方法,接口没有构造方法。

3.是否存在多继承:一个抽象类只能继承一个抽象或非抽象类,一个接口可以继承多个接口。

4.实现时:抽象类用的是extends 接口implements

5.成员变量:

6.方法:抽象类可以定义任意合法方法;可以是静态非静态公有私有,接口只能定义抽象方法。JDK7及其以下版本JDK只能包含公开且抽象的方法(默认由public abstract修饰),而JDK8及以上版本可以包含default、static修饰的非抽象方法。

 

方法:抽象类可包含任意合法方法(包括各种访问级别的非抽象类方法和非抽象实例方法,也包含除private外的非静态抽象方法)。接口:JDK7及其以下版本JDK只能包含公开且抽象的方法(默认由public abstract修饰),而JDK8开始可以包含default、static修饰的非抽象方法。

如何实现抽象方法:抽象类通过自定义类继承抽象类的方式实现抽象类的抽象方法;接口通过自定义类implements接口实现接口中的抽象方法,定义类可以implements多个接口。

 

package sea;

public interface Mammal extends I,II {
	
	int AGE =90;
	void move();
	//public abstract void move();
	public default void eat() {
		
	}
	
	public static void walk() {
		
	}
	

}



package sea;

public interface Mammal extends I,II {
	
	int AGE =90;
	void move();
	//public abstract void move();
	public default void eat() {
		
	}
	
	public static void walk() {
		
	}
	

}


package sea;

public class Test {

	public static void main(String[] args) {
		//Mammal mammal =new Whale();
		//mammal.move();
		//

	}

}


 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值