多态及抽象类

多态(动态绑定)(持绑定):

1:多态是指“在执行期间”(而非编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
2:所谓多态,就是指一个引用(类型)在不同的情况下的多种状态。也可以理解为,多态是指通过指向父类的指针,来调用在不同子类中实现的方法。。

例:

class	Animal {
	private	String	name;
	Animal (String name) { this.name = name;}

	public	void	enjoy(){		//第一个enjoy方法
		System.out.println("叫声.....")
	}
}

class	Cat	extends	Animal {
	private	String	eyeColor;
	Cat(String n, String  c) { super (n) ; eyeColor = c ; }
	public	void	enjoy() {		//第二个enjoy方法,重写了父类中的enjoy方法
		System.out.println("猫叫声....");
	} 
}	

class	Dog	extends	Animal {
	private	String	furColor;
	Dog(String n,String c) { super (n); furColor = c;}
	public	void	enjoy(){		//第三个enjoy方法		
		System.out.println("狗叫声......");
	}
}

class	Lady {
	private  String	name;
	private	Animal	pet;
	Lady(String	name, Animal pet) {
		this.name = name;
		this.pet = pet;
	}
	public	void		myPetEnjoy() { pet.enjoy(); }		//调用enjoy方法,调用哪个enjoy方法,根据实际类型来判断,**这就是多态**
}

public	class	Test {
	public	static	void	main(String [] args) {
		Cat	c = new	Cat("catname","blue");
		Dog	d = new	Dog("dogname","black");

		Lady	l1 = new	Lady("l1",c);		//Lady类中的L1中的c,指向上 Cat	c = new	Cat("catname","blue")
		Lady	l2 = new	Lady("l2",d);

		l1.myPetEnjoy();
		l2.myPetEnjoy();
	}	
}

多态存在的三个必要条件:

1: 要有继承。
2:要有重写。
3:父类引用指向子类对象。
(当满足这三个条件后,调父类中的被重写方法时,实际中new得失哪个子类对象,就调用哪个子类中的方法)

抽象类:

1:用abstract关键字来修饰一个类时,这个类叫做抽象类;
用abstract关键字来修饰一个方法时,这个方法叫做抽象方法。
2:含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。
3:抽象类不能被实例化。
4:抽象方法只需声明,而不需实现。

例:

//父类Animal类中的enjoy方法没有实现的必要,但是有定义的必要
class	Animal {
	private	String	name;
	Animal (String name) { this.name = name;}

	public	void	enjoy(){		
		System.out.println("叫声.....")		//这句话其实并没有实现,在这里引入抽象的概念,改写, 定义enjoy这个重写方法,在子类中必须被重写,这个类中含有了抽象方法,则这个类需要被声明为抽象类。
	}
}
	abstract	class	Animal {		//声明为抽象类
	private	String	name;
	Animal (String name) { this.name = name;}

	public	abstract	void	 enjoy();		//声明为抽象方法
	}
}
//子类如果不想重写enjoy方法,只需要声明自己也是一个抽象类,交由自己的子类继承,重写。

class	Cat	extends	Animal {
	private	String	eyeColor;
	Cat(String n, String  c) { super (n) ; eyeColor = c ; }
	public	void	enjoy() {		
		System.out.println("猫叫声....");
	} 
}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值