您的位置:首页 > 编程语言 > Java开发

9、抽象类与接口

2016-01-18 11:25 447 查看


九、抽象类与接口

1、系统结构图(xmind)

——1.抽象类:



—2.接口:



2、tips

——1.抽象类的由来

       多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽

取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。

       例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不

明确吼叫的细节。

——2.栗

1.需求:

    公司中程序员有姓名,工号,薪水,工作内容。

    项目经理除了有姓名,工号,薪水,还有奖金,工作内容。

2.分析:

程序员:

        属性:姓名,工号,薪水。

        行为:工作。

经理:

        属性:姓名,工号,薪水,奖金。

        行为:工作。

程序员和经理不存在着直接继承关系。

但是,程序员和经理却具有共性内容,可以进行抽取,因为他们都是公司的雇员。

可以将程序员和经理进行抽取,建立体系。

代码:

abstract class Employee
{
private String name;
private String id;
private double salary;
//雇员,有名字、id、薪水三个属性,有work这个行为
Employee(String name,String id,double salary)
{
this.name = name;
this.id = id;
this.salary = salary;
}
public abstract void work();
}
//程序员继承雇员,输入属于程序员的三个属性以及他工作code的行为
class programmer extends Employee
{
programmer(String name,String id,double salary)
{
super(name,id,salary);
}
//重写work方法
public void work()
{
System.out.println("code..");
}
}
//经理继承雇员,输入属于经理的三个属性,工作manager的行为
class manager extends Employee
{
manager(String name,String id,double salary)
{
super(name,id,salary);
}
//重写work方法
public void work()
{
System.out.println("manager");
}
}
class EmployeeDemo
{
public static void main(String[] args)
{
programmer p = new programmer("wangwu","a1",10000);
p.work();

manager m = new manager("lisi","a2",11000);
m.work();

}
}


运行结果:



——3.接口

1.虽然抽象类中的全局变量和抽象方法的修饰符都可以不用写,但这样阅读性很差,所以最好写上。

2.类与类之间是继承关系,类与接口直接是实现关系。

3.接口不可以实例化,能由实现了接口并覆盖了接口中所有的抽象方法的子类实例化。否则,这个子类就是一个抽象类。

——4.抽象类和接口的异同点

相同点:都是不断向上抽取而来的。

不同点:

       1.抽象类需要被继承,而且只能单继承。

          接口需要被实现,而且可以多实现。

       2.抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。

          接口中只能定义抽象方法,必须由子类去实现。

       3.抽象类的继承,是is a关系,定义该体系的基本共性内容。

          接口的实现是like a关系。

       4.抽象类中能够将变量和方法私有。

          接口中的方法和常量只能是public。

——5.接口实例

/*
笔记本电脑使用:
为了扩展笔记本的功能,但日后出现什么功能设备不知道。
因此需要定义一个规则,只要日后出现的设备都符合这个规则即可。
规则在java中就是接口

*/
interface Usb
{
//暴露的原则
public void open();
public void close();
}

class UsbMouse implements Usb
{
public void open()
{
System.out.println("mouse open");
}
public void close()
{
System.out.println("mouse close");
}
}
//实现原则,这些设备和电脑的耦合性降低了
class Upan implements Usb
{
public void open()
{
System.out.println("upan open");
}
public void close()
{
System.out.println("upan close");
}
}

class  BookPc
{
public static void main(String[] args)
{
useUsb(new Upan());
}
//使用原则
//接口类型的引用,用于接受(指向)接口的子类对象。
public static void useUsb(Usb u)
{
if(u != null)
{
u.open();
u.close();
}
}
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java