JAVA三大支柱之多态

JAVA三剑客之多态

多态概念叙述

1.JAVA是面向对象的程序设计语言,而面向对象程序设计的三大支柱是封装、继承和多态。多态是继封装和继承之后第三大特性。

2.借由现实事物对多态进行理解:程序员张三是个人,张三就包含了程序员和人两种特性。因为程序员是人的一种,所以可以说程序员继承了人这个类。java作为面向对象的语言,同样能描述对象的多种状态,如定义一个程序员的类,它是继承了人这个类的,那么一个程序员对象也是人。

3.多态体现为父类引用变量可以指向子类对象

4.前提条件,两个状态必须有子类父类关系
注意:在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

5.多态定义与使用格式:
定义格式:父类类型 变量名=new 子类类型();

6.理解:
1》多态是同一个行为具有多个不同表现形式或形态的能力。
2》多态就是同一个接口,使用不同的实例而执行不同操作。

多态的实现

继承是为多态的实现做铺垫,我们可以编写一个指向子类的父类类型引用,那么该引用既可以处理父类对象,也可以子类对象。当相同的指令发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的行为。多态就是相同的信息使得不同的类做出不同的响应

java实现多态的三个必要条件是:继承、重写和向上转型

继承:在多态中必须存在有继承关系的子类和父类。

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

!!向上转型!!

在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

//eg.s向上转型
public class Human{
	public void who(){
		System.out.println("I'm human.");
	}
	public static void main(String[] args){
		Programmer p = new Programmer();
		p.who();
		
		Human h = new Teacher();//向上转型
		h.who();//动态绑定
	}
}

class Programmer extends Human{
	@Override
	public void who(){
		System.out.println("I'm programmer");
	}
}

class Teacher extends Human{
	@Override
	public void who(){
		System.out.println("I'm teacher");
	}
}

要点
1.向上转型不要强制转型
2.父类引用指向的或者调用的方法是子类的方法,这个叫做动态绑定
3.向上转型后父类引用不能调用子类自己的方法

!!向下转型!!

让父类调用子类拥有而自己没有的方法。

public class Human{
	public void who(){
		System.out.println("I'm Hunman");
	}
	
	public static void main(String[] args){
		//1.向上转型
		Teacher t1 = new Teacher();
		Human h1 = t1;
		h1.who();
		//h1.speak();
		//2.向下转型
		Teacher t2 = new Teacher();
		Human h2 = t2;
		t2 = (Teacher)h2;
		t2.speak();
		//向下转型:类型防护
		Human h3 = new Human();
		if(h3 instanceof Teacher){
			Teacher t3 = (Teacher)h3;
			t3.speak(); 
		}
	}
}

class Teacher extends Human{
	@Override
	public void who(){
		System.out.println("I'm Teacher");
	}
	
	public void speak(){
		System.out.println("I can teach my students");
	}
}

抽象类

· 抽象方法是出现在基类中的一种方法,但要求在派生类中被重写。
· 一个抽象方法只有方法头,没有方法主体
· 包含抽象方法的类就会自动办成抽象类,隐刺必须以abstract关键字声明。
· 抽象方法会被用来确保派生类会实现这个方法
· 若类含有抽象方法,则类必须以abstract关键字声明为抽象类
eg.public abstract class
· 抽象类可以含零或多个普通方法,也可以含零或多个抽象方法
· 不论抽象类是否含有抽象方法,其都不允许实例化,即不能创建抽象类的对象,因为其描述的是抽象概念。它只能作为其他类的基类。
· 若父类是抽象类,且子类不想成为抽象类,则子类必须将父类中所有抽象方法重写为带方法体的普通方法,否则子类仍必须是抽象类。

总结

在面向对象编程的时候,我们遇到的对象通常都会具有多种特性,我们要实现这个对象的程序化就必须也把它的多种特性表现出来。可以说,封装就是组装了一个人偶,继承则是给它装上了工具,而多态则是给他赋予了思想和性格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值