java多态与接口

JAVA 面向对象编程之多态与接口

定义:

多态:同一消息可以根据发送对象的不同而采用多种不同的行为方式,根据其实际了类型调用其相应的方法。

可以理解为:同一条命令被不同的对象接收做出的不同响应。

1.1多态实现方式:

1.1.1基于继承实现的多态

基于继承的实现机制主要表现在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一个方法的重写可以表现出不同的行为。

1.1.2 基于接口实现多态

基于接口实现多态,指接口的引用必须是指向实现了该接口的一个实现类的实例。

在运行时,根据对象引用的实际类型来执行对于的方法。

示例:

package 多态练习01;

public class Person implements Skill {
	//姓名
	private String name;
	//年龄
	private int age;
	//性别
	private char sex;
	
	public Person() {
		
	}
	
	public Person(String name,int age,char sex) {
		this.name = name;
		this.age =age;
		this.sex = sex;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}
	
	public void eating() {
		System.out.println("人在吃饭...");
	}
	
	//注意这里是静态的方法 static void sleeping()
	public static void sleeping() {
		System.out.println("人正在睡觉...");
	}

	@Override
	public void drinking() {
		// TODO Auto-generated method stub
		System.out.println("人在喝东西...");
		
	}
	
}
package 多态练习01;

//技能接口
public interface Skill {
	//喝酒接口  drinking接口  
	void drinking();
}
package 多态练习01;

public class Chinese extends Person {

	public Chinese() {
		super();
	}
	
	public Chinese(String name, int age, char sex) {
		// TODO Auto-generated constructor stub
		super(name,age,sex);
	}

	@Override
	public void eating() {
		// 中国人吃饭时一般是用筷子和汤勺  重写了Person类的eating方法
		System.out.println(this.getName()+"是用筷子和汤勺进行吃饭的...");
	}
	
	
	
	@Override
	public void drinking() {
		// TODO 接口方法重写
		System.out.println("中国人喝二锅头,高粱酒...");
	}

	//在这里写这个sleeping()方法 并不会对 Person类中的sleeping方法给覆盖重写
	//记住因为方法是static 静态的,静态是属于类的,并不是属于对象的,所以这里在进行多态调用时
	//还是调用Person类中的sleeping()方法
	public static void sleeping() {
		System.out.println("中国人在睡觉...");
	}
}
package 多态练习01;

public class American extends Person {

	public American() {
		super();
	}
	
	public American(String name,int age,char sex) {
		super(name,age,sex);
	}
	
	
	
	@Override
	public void drinking() {
		// TODO 接口方法重写  
		System.out.println("美国人和鸡尾酒,威士忌...");
	}

	@Override
	public void eating() {
		// 美国人吃饭时一般是用刀子和叉子来进行吃饭的  重写了Person类的eating方法
		System.out.println(this.getName()+"吃饭是用刀子和叉子...");
	}
	
	//同样的 这里在进行多态调用时也是只调用Person类的sleep()方法...
	public static void sleeping() {
		System.out.println("美国人在睡觉....");
	}
	
}
package 多态练习01;

public class Test {
	/*
	 * 测试类  测试 Person方法中的多态调用
	 */
	public static void main(String[] args) {
		//多态调用
		Person yao = new Chinese("姚明", 33, '男');
		Person harden = new American("哈登", 26, '男');
		
		yao.eating();  //调用了子类重写父类的方法 eating()
		harden.eating();   //调用了子类重写父类的方法 eating()
		
		System.out.println("------------------------------------------");
		
		//调用接口 实现多态
		Skill s1 = new Chinese();
		Skill s2 = new American();
	
		s1.drinking();
		s2.drinking();
		
		System.out.println("----------------------------------");
		
		//类的静态方法  可以用  类名.方法()进行调用
		yao.sleeping();   // Chinese.sleeping();
		harden.sleeping();   // American.sleeping();
		
	}	
}

接口:接口是对行为的抽象,或接口是定义标准或规范的。 接口中没有具体实现,接口中定义的所有方法是抽象方法,所有常量是public static final常量,接口可以多实现,一个类可以实现多个接口,接口可以继承接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值