对于类、抽象类和接口,我们可以理解为:抽象是对一类事物本质的抽象,接口是对事物动作的抽象,而抽象类和类又是相对的概念。
举个例子:

  • 普通类:金毛,哈士奇,柴犬都是狗类。
  • 抽象类:猫,狗,猪又可以抽象出动物类,动物类相比于狗类会更抽象一些。
    抽象出来的性质是事物的本质不会改变。
  • 猫可以爬树,吃饭,睡觉;狗可以游泳,看家,吃饭,这些行为,我们可以将其定义在接口中。
    这些动作是可变的,当猫学会游泳的时候可以在接口中增添一个新的方法

因此由上我们就能理解:一只狗可以会游泳会爬树,也就是说实现多个接口,但一只狗不能又是动物又是人,所有抽象类只能被单继承

类:类是一个模板,它描述一类对象的行为和状态。

接口(interface)

接口就是规定一个程序要做什么,但不写具体的内容

public interface Dog{ 
	void eat();
	void swim();
	...
}

接口的特征:

  • 不能用于实例化对象
  • 接口中没有构造方法
  • 接口中所有方法必须是抽象方法(隐式抽象),没有方法体
  • 接口中的变量只能是public static final修饰
  • 接口不是被类继承,而是实现(implements)
  • 接口支持多实现
  • 当类实现接口时,必须将其中所有方法都实现
  • 若实现接口的是抽象类,就没有必要实现该接口的方法
  • 一个接口可以继承另一个接口,使用extends关键字

抽象类

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

public abstract class Animal{ 
	private String name;
	public abstract void eat(); 
	void swim(){ 
		System.out.print("游泳");
	}
	...
}

抽象类的特征:

  • 抽象类不能被实例化
  • 抽象类中不一定包含抽象方法,但有抽象方法的类必须是抽象类
  • 抽象类中的抽象方法只是声明,不包含方法体
  • 构造方法,类方法不能声明为抽象方法
  • 抽象类的子类必须给出抽象类中抽象方法的具体实现,除非子类也是抽象类

接口和抽象类:
共同点:

  • 接口和抽象类都不能实例化

不同点:

  • 接口是被类实现,抽象类是被子类继承
  • 接口中只有未实现的方法和不可变常量,抽象类中可以有变量、具体方法以及抽象方法
  • 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
  • 接口可以多继承,而抽象类只能单继承

抽象类和类:
唯一不同点就是抽象类不能被实例化,且可以拥有abstrac方法,其余都一样(抽象类中可以有main方法,可以继承具体类。。。)

本文地址:https://blog.csdn.net/smart_1234/article/details/114269775