java学习笔记-面向对象01——多态详解_对象类型转换
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(“猫叫:喵喵”);
}
}
- java学习笔记:java的多态,子类和父类的相互转换,父类引用指向子类的对象
- java学习:对象的类型转换、多态
- Java学习笔记二十六:Java多态中的引用类型转换
- 黑马程序员J_ava学习笔记_Java中的基本数据类型转换详解
- java学习笔记(六)----对象的类型转换, 匿名内置类
- 详解Java多态对象的类型转换与动态绑定
- java学习笔记5.23对象和面向对象的思考,继承和多态
- java学习笔记01--数据类型
- java核心技术学习笔记3---运算符与类型转换
- 【学习笔记01】java面向对象-类、对象
- java学习笔记01--数据类型
- java学习笔记01--数据类型
- 第五天01 JAVA基础语法(类与对象)(学习笔记)
- java学习笔记之面向对象多态
- [C#] 类型学习笔记二:详解对象之间的比较
- java学习笔记(五)——继承多态及类的转换问题
- (原创)c#学习笔记05--变量的更多内容01--类型转换01--隐式转换
- objective-c学习笔记第六章《objective-c 多态,动态类型,动态绑定与java中的区别》
- java入门教程-4.6Java多态对象的类型转换
- 【自用】Javanote170801(封装、多态、instanceof运算符、对象转换类型、final关键字、参数传递)