【Java】多态

多态

对象的多种形态

1,引用多态父类的引用可以指向本类的对象,

可以指向子类的对象 Animal obj = new Dog();

2,方法多态创建本类对象时,该对象所调用的方法为本类方法;

当我们是引用多态时,创建子类对象时,调用的方法为子类‘重写’或者从父类‘继承’来的方法。

继承是多态的实现基础


● 多态中的引用类型转换
向上类型转换,即自动类型转换,小类型到大类型,没有风险,子->父
向下类型转换,即强制类型转换,大类型到小类型,有风险,父->子
instanceof运算符,避免类型转换的安全性问题
 
//多态中的引用类型转换
		Dog dog=new Dog();//创建一个对象,并用子类的引用指向这个对象
		Animal animal = dog;//父类的引用指向子类对象,自动类型提升 向上类型转换
		Dog dog2 = (Dog)animal;//向下类型转换 强制类型转换(但是存在风险,如下)
		if(animal instanceof Cat){
			Cat cat = (Cat)animal;
		}else {
			System.out.println("animal无法进行类型转换成Cat类型");
		}
		
	/* 编译时Cat类型,运行时Dog类型
	 * 在内存中开辟内存空间的是Dog类型的对象,将父类引用转换成Cat子类引用时,进行强制转换,编译器不会报错,但运行报错
	 * Cat  Dog是两个不同的类型,所以不能将Dog类转换成Cat类
	 * 通过Instanceof运算符避免类型转换的安全性问题
	 */

● 多态中的抽象类

1、语法定义:
 抽象类钱使用abstract关键字修饰,则该类为抽象类。
2、应用场景:
a、在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法(抽象类就是约束子类必须有哪些方法,不关注子类如何去实现)
b、从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。
3、作用:
 限制规定子类必须实现某些方法,但不关注实现细节。
4、使用规则:
a、abstract定义抽象类
b、abstract定义抽象方法,只有声明,不需要实现
c、包含抽象方法的类是抽象类
d、抽象类中可以包含普通的方法,也可以没有抽象方法
e、抽象类不能直接创建,可以定义引用变量,指向子类对象
创建父类时设置为抽象类(约束子类),继承的子类里会自动实现父类要求的方法
public abstract class Telphone{
   public abstract void call(); //抽象方法没有方法体以分号结束
   public abstract void message();
}

main:
Telphone tel1=new Cellphone();
tel1.call();
tel1.message();
Telphone tel2=new SmartPhone();
tel2.call();
tel2.message();
● Java中的接口
接口 一种特殊的类
类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。
定义接口,用interface关键字。
接口就是用来被继承,被实现的,修饰符一般用public
[public] interface 接口名 [extends 父接口1,父接口2...]
{
	0~多个常量定义...
	0~多个抽象方法的定义...
}
接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成;接口是一种规范,用来约束类;
接口中的常量即使定义时不添加 public static final ,系统也会自动加上;方法都是抽象方法;
使用接口:
一个类可实现一个或多个接口,实现接口使用implements关键字。
修饰符class类名extends父类implements接口1,接口2.。。{
	类体部分//如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法
}
如果要继承父类,继承父类必须在实现接口之前

给接口命名,通常给Name前加一个I,与其他类区别开

定义一个接口之后,在主类方法中用匿名内部类实现一个接口,可以把接口实例化,免除了创建一个类来实现接口
匿名内部类,就是没有名字的内部类,多用于关注实现而不关注实现类的名称

语法格式:

Interface i = new Interface(){

	public void method(){

		System.out.println("匿名内部类实现接口的方式");

	}

}
●UML
统一建模语言
常用UML图:
用例图(The Use Case Diagram):以可视化表达系统如何满足业务规则和特定的用户需求
序列图(The Sequence Diagram):用于按照交互发生的一系列顺序,显示对象之间的这些交互
类图/类别图(The Class Diagram):UML类图、业务逻辑和所有支持结构一同被用于定义全部的代码结构.描述类之间的关系,类中的属性和方法

UML建模工具
Visio、Rational Rose、PowerDesign 三种建模工具应用最广
1. Rational Rose,它是 IBM 的
http://www.uml.org.cn/RequrementProject/200604043.htm
2. Microsoft 的 Microsoft Office Visio
http://www.microsoft.com/china/office/xp/visio/default.asp
3.PowerDesigner
http://www.uml.org.cn/UMLTools/powerDesigner/powerDesignerToolIntroduction.htm


继承关系是实线,接口关系是虚线

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值