9、抽象类与接口


九、抽象类与接口

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();
		}
	}
}


运行结果:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值