javaSE-面向对象-接口和抽象类的区别

共  性:

都是不断抽取出来的抽象的概念

区别 1:

抽象类体现继承关系,一个类只能单继承

接口体现实现关系,一个类可以多实现

区别 2:

抽象类是继承,是 "is a "关系

接口是实现,是 "like a"关系

区别 3:

抽象类中可以定义非抽象方法,供子类直接使用

接口的方法都是抽象,接口中的成员都有固定修饰符


/*
接口和抽象类的区别?

共性:
	抽象类和接口都是不断向上抽取而来的。

区别:
	1,抽象类中可以定义抽象方法也可以定义非抽象方法,非抽象方法可以直接提供给子类使用。
		接口中只能定义抽象方法。

	2,类与类之间是继承关系,is a关系。
	   类与接口之间是实现关系。like a关系。

	3,类与类之间只能单继承。
	   类与接口之间可以多实现。




举例:
*/
abstract class 犬
{
	abstract 吼叫();
}
/*
class 搜爆
{
	搜爆();
}
*/
interface 搜爆able 
{
	搜爆();
}


搜爆犬 extends 犬 implements 搜爆able
{
	吼叫(){}
	搜爆(){}
}

搜爆机器人 extends 机器人 implements 搜爆able
{
	搜爆(){}
}



abstract class Student
{
	abstract void study();
}
interface Somking
{
	void somke();
}

class SmokeStudent extends Student implements Somking
{

}


abstract class SmokeMan
{
	abstract void smoke();
}
interface Study
{
}
	
class StudentSomkeMan extends SmokeMan implements Study
{
}

/*
雇员示例:
需求:公司中程序员有姓名,工号,薪水,工作内容。
项目经理除了有姓名,工号,薪水,还有奖金,工作内容。
对给出需求进行数据建模。

程序员:
	属性:姓名,工号,薪水,
	行为:工作。
经理:
	属性:姓名,工号,薪水,奖金。
	行为:工作。


员工:
	属性:姓名,工号,薪水,
	行为:工作。

*/
abstract class Employee
{
	private String name;
	private String id;
	private double pay;

	Employee(String name,String id,double pay)
	{
		this.name = name;
		this.id = id;
		this.pay = pay;
	}
	abstract void work();
}
class Programmer extends Employee
{
	Programmer(String name,String id,double pay)
	{
		super(name,id,pay);
	}
	public void work()
	{
		System.out.println("code");
	}
}
class Manager extends Employee
{
	private double bonus;
	Manager(String name,String id,double pay,double bonus)
	{
		super(name,id,pay);
		this.bonus = bonus;
	}
	public void work()
	{
		System.out.println("manage");
	}
}


class 
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}
}


你可能感兴趣的:(javaSE)