抽象类与接口

我们为什么需要抽象类、接口?

  当我们实际工作中,常常遇到跨部门协作,多人共同开发一个系统的情况,众人拾柴火焰高嘛。但人一多,就涉及到分工的问题,有人专注于设计功能,有人设计程序的规范,用人来实现具体的代码内容,等等。此时就有一种情况很常见:上游程序员负责将需要的功能定义出来,但他并没有精力去逐一实现,而是需要下游程序员的协作来实现具体代码。此时Java的抽象类与接口,就很适用于这种情况。

抽象类

  我们将用abstract 修饰的类,称为抽象类。《abstract 修饰符》

  抽象类的特点

  • 1.抽象类不能直接创建对象,但是可以有构造器。
  • 2.抽象类当中,可以有抽象方法,也可以有非抽象方法。有抽象方法的类必须为抽象类。
  • 3.若子类也为抽象类,则子类可以不覆盖父类抽象方法。但子类为非抽象类,则必须重写所有父类的抽象方法。
  • 4.抽象类可以有自己的成员变量。
  • 5.不能用final修饰。
  • 6.Java中,一个类只能继承一个抽象类。

  来个实例:

abstract class Person {        //抽象类,注意不能同时被 abstract 和 final 修饰
	public static int totalnum;   // 抽象类可以有自己的
	private String name;
	private int age;

	Person(String name,int age) {   // 抽象类可以有构造器
		this.name = name;
		this.age = age;
	}
	
	public abstract void die();      //抽象类中可以有抽象方法,有抽象方法一定要声明为抽象类
	
	public static void destroy() {	//抽象类中也可以有非抽象方法
		totalnum = 0;
	}
}

class student extends Person{

	student(String name, int age) {
		super(name, age);
	}

	@Override
	public void die() {			   //非抽象子类,必须重写父类的所有抽象方法
		System.out.println("Die");
	}
	
}

public class Test {
   public static void main(String[] args){
	  new Person();     // 报错,抽象类无法实例化
   }
}

接口

  接口,在我的理解中,就是一种比抽象类还抽象的,它太抽象了,已经抽象到不再是一个类Class,而是另用了interface这个词来表示接口。

  接口的特点

  • 1.接口没有构造器,所以也不能实例出对象。
  • 2.接口中的方法是也必须是public abstract的,即使省略没写这两个修饰符,依旧也是public abstract的。接口中的方法不能有实现。
  • 3.接口当中定义的变量,都是全局静态常量(public stsatic final),即使没写也是。
  • 4.接口中的内部类,也都是public abstract的。
  • 5.接口中不能有静态代码块及静态方法。(不能有static)
  • 6.接口是可以被继承的,并且可以多继承。

  来个实例:

//----------------------------接口----------------------------------
interface Living{  // 活着的,接口
	
	void breathe();  // 抽象方法“呼吸”
}

interface Animal{  // 动物,接口
	
	int max_age = 100;  // 接口中的变量都是全局静态常量public stsatic final
	
	void eatFood();
}

interface Pet extends Animal,Living{   // 宠物接口,接口继承接口时,用extends,可以多继承
	
	void Clingy();  // 抽象方法“粘人”
	
}
//-------------------------------类----------------------------------
class Cat implements Animal,Pet,Living{  // 类实现接口时,用implements,而不是extends。
										 // 此处其实等效于实现Pet一个接口即可,列出来时为了强调可以实现多个接口

	@Override
	public void eatFood() {
		System.out.println("猫吃小鱼干");
	}

	@Override
	public void Clingy() {
		System.out.println("猫粘人");
	}

	@Override
	public void breathe() {
		System.out.println("呼吸");
		
	}
	
}

抽象类与接口的异同

抽象类与接口的相同点

  • 都不能直接实例化对象,需要被其它类继承或实现
  • 都可以定义抽象方法

抽象类与接口的不同点

  • 接口没有构造器,抽象类中有构造器
  • 抽象类可以包含实现方法,而接口中只可以有抽象方法
  • 抽象类中成员变量为默认权限,接口中为public static final
  • 非抽象子类继承抽象类,使用extends。非接口子类实现接口,用implements。
  • 抽象类可以实现接口。即可以abstract class 抽象类名 implements 接口名{ }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值