共 性: | 都是不断抽取出来的抽象的概念 |
区别 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!");
}
}