您的位置:首页 > 编程语言 > Java开发

java学习笔记-面向对象01——多态详解_对象类型转换

2019-07-24 10:21 267 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_45412372/article/details/97107574

package 面向对象基础02;

* 引用变量的两种类型:

• 编译时类型(模糊一点,一般是一个父类) 意思是编译声明时,可以声明父类,写子类的构造方法Animal dog = new Dog01();
• 由声明时的类型决定。 (编译器中Animal dog = new Dog01(); dog是Animal类)
• 运行时类型(运行时,具体是哪个子类就是哪个子类)
• 由实际对应的对象类型决定。 ( 实际执行中Animal dog = new Dog01(); dog是Dog01类)
• 多态的存在要有3个必要条件:
• 要有继承,要有方法重写,父类引用指向子类对象

**

下述代码概况

**

  • 定义animal类,在animal类中定义shout方法;定义Cat和Dog子类,在子类中重写shout方法;
  • 在公共类中定义animalShout(Animal a)方法,传入Animal子类,父类引用指向子类对象,a.shout()即可调用子类方法

public class 测试多态 {
public static void main(String[] args) {
//自动向上转型,编译的时候dog对象可以自动转为父类的Animal类,但实际上还是dog对象实质还是Dog01类
Animal dog = new Dog01();
animalShout(dog);
dog.shout();//也可以直接调用Dog01中的父类有,但被子类重写的子类方法方法
https://dog.seeDor(); 但不能直接调用子类独有的方法,因为此时dog对象在编译器中是 Animal类,需要先强制转型后才可以
//自动向下转型,实质是回归本来面目。编译器中dog对象还是父类的animal,不能直接回归本来面目,需要强制转型
Dog01 dog2 = (Dog01)dog;
animalShout(dog2);
dog2.seeDor();//子类独有的方法,对象回归本来面目才可以调用
}
static void animalShout(Animal a) { //a为父类的引用,可以传入子类对象,父类引用指向子类对象;(运行时,具体是哪个子类就是哪个子类)
a.shout();
}

}

class Animal{
public void shout() {
System.out.println(“动物叫”);
}
}

class Dog01 extends Animal{
public void shout() {
System.out.println(“狗叫:旺旺”);
}
public void seeDor() { //Dog01类独有的方法
System.out.println(“看好门!”);
}
}

class Cat01 extends Animal{
public void shout() {
System.out.println(“猫叫:喵喵”);
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: