【JAVA】多态

多态 (polymorphic)

多[多种]态[状态]基本介绍
方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础之上的。

对象的多态(核心,困难,重点)
重要的几句话:
(1)一个对象的编译类型和运行类型可以不一致
Animal animal = new Dog();[animal 编译类型是Animal,运行类型是Dog]
(2)编译类型在定义对象时,就确定了,不能改变
animal=new Cat();[animal 的运行类型变成了Cat,编译类型仍然是Animal]
(3)运行类型是可以变化的.
(4)编译类型看定义时=号的左边,运行类型看=号的右边

public class Animal {
	public void  cry() {
		System.out.println("动物在叫。");
		
	}
	
}

public class Cat extends Animal{
	public void  cry() {
		System.out.println("Cat cry() 小猫喵喵叫");
		
	}
}
public class Dog extends Animal{
	public void  cry() {
		System.out.println("Dog cry() 小狗汪汪叫");
		
	}
}

public class poly {
public static void main(String[] args) {
//体验对象多态特点
// animal 编译类型就是 Animal ,运行类型Dog
	Animal animal = new Dog();
//因为运行时,执行到改行时,animal运行类型是Dog,所以cry就是Dog的cry

animal.cry();//小狗汪汗叫

//animal 编译类型Animal,运行类型就是 Cat
animal = new Cat();
animal.cry();//小猫瞄瞄叫
}
}

Dog cry() 小狗汪汪叫
Cat cry() 小猫喵喵叫

向上转型

多态的前提是:两个对象(类)存在继承关系多态的向上转型

  1. 本质:父类的引用指向了子类的对象
  2. 语法:父类类型 引用名=new 子类类型();
  3. 特点:编译类型看左边,运行类型看右边。
    可以调用父类中的所有成员(需遵守访问权限),不能调用子类中特有成员;
    最终运行效果看子类的具体实现!(子类中有则调用子类中的方法或属性(父类中也要有,不要就是特有成员,无法调用),没有就找父类,按继承方式一级一级往上找

向下转型

  1. 语法:子类类型 引用名=(子类类型) 父类引用;(Cat cat= Cat animal)(animal 指向cat ,相当于cat的另一个名字叫animal)
  2. 只能强转父类的引用,不能强转父类的对象(一个人换个名字)
  3. 要求父类的引用必须指向的是当前目标类型的对象(猫就是猫,不能不成狗,所以如果下面还有【Dog dog=Dog animal】就会报错)
  4. 当向下转型后,可以调用子类类型中所有的成员
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值