Java的面向对象:多态(学习篇6)

1.为防止混淆,我在这里一次性的总结面向对象编程中封装,继承,多态的概念。

封装,是指将客观世界中某个事物的属性与行为绑定在一起,并放置在一个逻辑单元内(即对象内),该逻辑单元负责将不需要让外界知道的信息隐藏起来, 外界对对象内部属性的所有访问只能通过提供的用户接口来实现。这样做既可以实现对对象信息的保护,即不允许用户随意更改对象的属性,又可以提高软件的可维护性,即只要用户接口不改变,任何封装体内部的改变都不会对软件系统的其他部分造成任何的影响。

继承,表示类与类 之间的一种关系,指在一个已经存在的类的基础上,这个类派生出“子类”, 子类在拥有原来的类的行为和属性的基础上,增加了一些新的属性和方法。

多态,多态是指不同的对象,收到同一信息可以产生不同的结果。多态性增强了软件的灵活性和重用性。简单地说,多态就是把子类当作父类使用的能力。多态的实现基于类的继承特性,并需要支持子类类型 变量的引用,通过这个父类引用调用相关方法时,通过这个父类引用相关方法,不仅方法被重写类,数据成员也被重写了,这时候访问的数据成员就 没法被确定。使用多态,可以使用父类定义相关接口,而具体操作则可以由不同的子类来实现,这正如计算机中的主板提供一系列插槽。Java 中则可以 通过不同的子类实现相同的功能,而至于子类如何实现这些功能不需要父类操心。

2.使用多态的条件:a.有继承    b有重写    

3.一个多态的实例

class 动物{
	void cry(){

	}
}
class 猫 extends 动物{
	void cry(){
		System.out.println("这是猫的叫声:喵喵……喵喵");
	}
}

class 狗 extends 动物{
	void cry(){
		System.out.println("这是狗的叫声:汪汪……汪汪");
	}
}




public class Example {
	public static void main(String args[]){
		动物  animal = new 狗();
		animal.cry();
		animal=new 猫();  //animal是猫的上转型对象
		animal.cry();

	}
}

4.关于上转型。对象的上转型对象的实体是由子类负责创建的, 但上转型的对象会失去原对象的一些属性和功能(上转型对象相当于子类对象的一个简化对象)。上转型对象不能 操作子类新增的成员变量, 不能调用子类新增的方法,上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法。上转型对象操作子类继承的方法或子类重写的方法,其作用等价于子类对象去调用这些方法。因此如果子类重写了父类的方法后,当对象的上转型对象调用这个方法时一定是调用了子类重写的方法。

 向上转型和向下转型都属于对象转型。子类的对象可以当作父类 的对象使用称为向上转型,反之称为向下转型。可以使用变量instanceof来判断该引用对象 所指向的类型是否属于该类或该类的子类。

5向上转型和抽象类。抽象类是经常被重写的类。含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。用关键字abstract修饰。对于abstract方法,只允许声明,不允许实现,而且不允许使用final和abstract修饰同一个方法。抽象类里可包含抽象方法和非抽象方法。abstract类不可以使用new创建对象,对于abstract类,不能使用new运算符创建出该类的对象,如果一个非抽象类是某抽象类的子类, 那么他必须重写父类的抽象方法,给出方法体,这就是为什么不允许使用final和abstract同时修饰一个方法的原因。抽象类不能够被实例化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值