分为向上转型 和 向下转型
以前碰到的 int 》float 等等都是对象转型
基类的引用类型可以指向子类的变量
eg。入动物 和 狗的关系 狗是动物 叫你传一条动物 你传一条狗 行啊
一个基类的引用不能访问子类对象新增的成员(属性和方法)。 当要传动物 别人传一狗 则这是不能把狗当当狗访问。
需要访问的话 可以强制转换
3.可以使用引用 变量instanceof 类名 来判断该引用变量是否属于该类或该类的子类
instanceof是看内存中到底是什么 而不是看引用
java 可扩长性好 基类的引用可以指向子类
动态绑定 多态 可以提供不错的扩张型
比单独定义几个方法好
最核心的机制 动态绑定 polymorphism
在执行的时候确定哪个类 决定用哪个方法
!!内部类最复杂的机制
public class Animal {
private String name;
Animal(String name){this。name=name;}
public void enjoy(){Sysytem。out。println(“叫声。。。”);
}
class cat extends Animal {
private String color;
Cat(String name,String color){this。name=name; this。name = color;}
public void enjoy(){System.out。ptintln(“猫叫。。。”);}
}
class Lady {
private String name;
private Animal pet;
Lady(String name,Animal pet){this。name= name,this。pet = pet;}
public void enjoy() { pet。enjoy();}
public class Test {
}
内存分布
实际当中new的什么类型 就调用谁
更深的机制是 new里面有指针 指向对用代码段的方法
这就是 动态绑定 多态 迟绑定
好处:程序的可扩长性
比如 上面要加入鸟的叫声 直接加 这就是面向对象的核心!!!!!!!!!!核心中的核心!!!!!!!!!
多态的存在有三个必要条件:1 要有继承
2 要有重写
3 父类引用指向子类对象
体会程序的可扩充性
分析游戏物体的多态包装
eg.
class GameObject{
}
其它所有类都从中继承
!!abstract 抽象类
用一个abstrct修饰一个类,该类叫抽象方法
抽象类不能实例化(残缺的类)
没有实现的必要
在子类中 迟早去实现相应的方法
只需要定义 不需要实现!!! (有高兴的方法 但具体高兴怎么表现 又是不同的)
抽象方法abstract
一定要重写 不然肯定出问题
有抽象方法 一定抽象类
子类一定要重写 要么继续抽象
抽象方法 只需声明无需实现