Java 对象的多态性——必须画图理解
2016-04-24 21:06
537 查看
引用多态(向上转型)
父类的引用可以指向本类的对象
父类的引用可以指向子类的对象(动态绑定)
一个引用调用的是哪个方法,取决于这个引用所指向的对象
输出 你
注意:
父类不能调用子类新声明的方法
子类的应用是不能指向父类的对象的
Tips:
一个引用能调用什么成员(变量和函数),取决于这个引用的类型(Outer )就是类型,里面没有ask()方法,所以不能调用ask();
向下转型
先向上转型
在向下转型
输出
可以通过instanceof来判断一个引用是否属于一个类
输出
false
true
父类的引用可以指向本类的对象
父类的引用可以指向子类的对象(动态绑定)
Outer in=new Outer();
Outer out=new Inner(); //指向子类的对象
一个引用调用的是哪个方法,取决于这个引用所指向的对象
class Outer{
public String A="我";
public void say(){
System.out.println("我");
}
}
class Inner extends Outer{
public String B="你";
public void say(){ //覆写父类方法
System.out.println("你");
}
public void ask(){
System.out.println("他");
}
}
class ListSetMap {
public static void main(String[] args) {
Outer out=new Inner(); //指向子类的对象
out.say();
//out.ask(); 会找不到符号
}
}
输出 你
注意:
父类不能调用子类新声明的方法
子类的应用是不能指向父类的对象的
Tips:
一个引用能调用什么成员(变量和函数),取决于这个引用的类型(Outer )就是类型,里面没有ask()方法,所以不能调用ask();
向下转型
先向上转型
在向下转型
class ListSetMap {
public static void main(String[] args) {
Outer o=new Inner(); //向上转型
Inner I=(Inner) o; //向下转型
System.out.println(I.A); //调用父类的A属性
System.out.println(I.B);
I.say();
I.ask();
}
}
输出
我
你
你
他
可以通过instanceof来判断一个引用是否属于一个类
Outer o=new Outer(); //向上转型
Outer k=new Inner();
System.out.println(o instanceof Inner);
System.out.println(k instanceof Inner);
输出
false
true
相关文章推荐
- Spring总结4—对持久层的支持(附:事务管理)
- 20145320 《Java程序设计》第8周学习总结
- 20145109竺文君、20145106石晟荣 java实验三
- Java 继承的一些重点
- Java 单例设计模式——构造方法私有化
- JAVA对象和XML文档、原来他们之间还有这一出
- java线程跟多线程
- 小结struts2应用开发步骤和流程(三)
- 排序算法-希尔排序
- java基础学习总结二(标识符、字符集、数据类型以及类型转换)
- 关于struts2.3的action
- Java 代码块
- Java static的简要概括
- 大数加减法-java实现
- Java this和super的区别
- 方便的自动Spring注解注入
- Java中的常见异常
- Java 实例化类的的几种方法
- Java “==”与“equals"的区别
- 20145309《Java程序设计》第八周学习总结