Java 面向对象 之 抽象类 abstract

http://www.verejava.com/?id=16992804621647

/**
	知识点: 抽象类 abstract

	题目: 爸爸叫我买一斤水果和一条鱼
	思路:
		1. 抽象出类:爸爸(Father), 儿子(Son), 水果(Fruit),鱼(Fish)
		2. 找出类关系: 儿子继承爸爸   水果买回来属于->Father->Son
		3. 找出方法: 买(buy)  是爸爸叫儿子买水果,爸爸知识发出了要求声明并没用实现
			而真正去实现这个是儿子
		

*/
/**
	注意:
		1. 加了关键字 abstract 的抽象方法不能有方法体实现,只能有方法的声明
		2. 当一个类中存在以 abstract 声明的抽象方法时, 该类必须加上abstract 关键
			字表明该类是抽象类
		3. 子类如果继承一个抽象类, 子类必须实现父类所有的抽象方法
		4. 抽象类中也可以声明实现方法,也就是抽象类中可以定义抽象方法,也可以定义
		   带方法体的实现方法,而子类不需要复写抽象父类的具体已经实现的方法
		5. 抽象类不能直接实例化,必须有其实现的子类间接来实例化
*/
public class TestAbstract
{
	public static void main(String[] args)
	{
		//实例化父亲
		//Father f=new Father();

		//实例化儿子
		Son s=new Son("李明");
		//地摊上有各种水果和鱼
		Fruit apple=new Fruit("苹果");
		Fruit grape=new Fruit("葡萄");

		Fish caoyu=new Fish("草鱼");
		Fish lianyu=new Fish("鲢鱼");

		//买水果和鱼
		s.buy(apple);
		s.buy(lianyu);

		//回家以后高兴的告诉爸爸
		System.out.println("爸爸,爸爸 我买了一斤:"+s.getFruit().getName()+" 和一条 : "+s.getFish().getName());
	}
}
abstract class Father
{
	protected Fruit fruit;
	protected Fish fish;

	public Fruit getFruit()
	{
		return this.fruit;
	}

	public Fish getFish()
	{
		return this.fish;
	}

	/**
		要求声明要买水果
	*/
	public abstract void buy(Fruit fruit);
	/**
		要求声明要买条鱼
	*/
	public abstract void buy(Fish fish);
}
class Son extends Father
{
	private String name;

	public Son(String name)
	{
		super();
		this.name=name;
	}

	/**
		儿子实现父亲买水果的要求
	*/
	public void buy(Fruit fruit)
	{
		this.fruit=fruit;
	}
	/**
		儿子实现父亲买条鱼的要求
	*/
	public void buy(Fish fish)
	{
		this.fish=fish;
	}

	public String getName()
	{
		return this.name;
	}
}
class Fruit
{
	private String name;

	public Fruit(String name)
	{
		this.name=name;
	}
	public String getName()
	{
		return this.name;
	}
}
class Fish
{
	private String name;

	public Fish(String name)
	{
		this.name=name;
	}
	public String getName()
	{
		return this.name;
	}
}

http://www.verejava.com/?id=16992804621647

猜你喜欢

转载自blog.csdn.net/verejava/article/details/80520303
今日推荐