小弟刚学java的,想问个基础的问题
假如有三个类A,B,C
其中类B继承类A
那么我在C类里A a=new B();
实例化的时候我们是说这是个A类型的指向B的对象还是?
运行时呢?a对象的方法列表又是指向A还是B类?
谢谢解答!
假如有三个类A,B,C
其中类B继承类A
那么我在C类里A a=new B();
实例化的时候我们是说这是个A类型的指向B的对象还是?
运行时呢?a对象的方法列表又是指向A还是B类?
谢谢解答!
解决方案 »
- JAVA socket通信时DataInputStream.read();异常返回-1
- 正则表达式:提取标签内信息。验证正确即散分
- Frame
- 成功跨越1000分,谢谢各位的支持,散光所有的可用分 (就差1分就四个裤衩了,奶奶的,怎么这么多人不结帖?)
- 用connection进行数据库连接更新数据时 ,不关闭connection对象为什么数据库不更新???
- 菜鸟必读3:怎樣生成java的可執行文件?(欢迎收藏)
- des加密有人给个列子吗
- 纯新手,问大神怎么练习java
- 有没有关于:JAVA应用程序内嵌图像资源的方法的文章
- 大家说说,实现web打印用那种方案比较好?fop还是applet?
- 如何显示彩色文本?
- 数组问题,高手请进
{
public String className = "class A!";
public void show()//A类中的show()方法
{
System.out.println("I'm class A's show()!");
}
}class B extends A
{
public String className = "class B!";
public void show()//重写父类A的方法show()
{
System.out.println("I'm class B's show()!");
}
public void showInB()//B类中新扩展的方法showInB()
{
System.out.println("I'm class B's showInB()");
}
}public class Go
{
public static void main(String[] args)
{
A a = new B();
/*
用A类类型的引用,保存B类的实例
(用父类的引用访问子类,动态多态?)
*/
a.show();
/*
即使用A类类型的引用来访问show()方法
但实际上,上面用new产生的对象实例是
B类型的,所以访问到是的B类中的show()方法
(方法的重写)
*/
//a.showInB();
/*
这句是错的,因为用父类的引用来访问子类所以从父类的
角度来看,父类中并没有showInB()这个方法.showInB()
是在子类中扩展出来的上面说了,new出来的是B类的实例,
所以可以用强制转换来访问到showInB(),((B)a).showInB();
*/
((B)a).showInB();
/*
通过强制转换来实现用父类的引用,访问子类中扩展出来的
方法.
*/
/*
实例化的时候我们是说这是个A类型的指向B的对象还是?
运行时呢?a对象的方法列表又是指向A还是B类?
1.A a只是声明了一个对象的引用,不管是什么类型的引用
它的大小都是32byte,也就是4个字节,是用来存放对象
的实例的在内存中的地址的.(System.out.println(a);)
*/
System.out.println(a);
/*
2.运行时也一样,具体是指向你声明的类型的本类或者子类
的对象的实例.
3."方法列表",,子类会继承父类中所有的非private方法
所以,可以用父类的引用访问到子类所有从父类继承下来的
方法,但是不可以访问到子类中扩展出来的方法,除非做强制
类型转换.如果子类重写了父类中的方法,那么访问到的是
子类中重写过的方法.
*/
}
}-----------------------------------------------
刚刚学Java不到两个星期,有错的地方,大家帮忙指正:)
A a=new B();那么方法列表是指向B对象,而字段是指向A类型的。
同时也谢谢大家!
当我们用A a=new B()的时候,假如我们要调用B类中的一个方法show(),编译器要检查形式类型也就是类A中是否有这样一个方法show(),解释器要检查实际类型也就是类B中是否有这个方法show(),如果两个类中都有show()方法的话,调用a.show()的时候,则是调用的类B中的show()方法,当类B中没有show()的时候,调用a.show(),则是调用的类A中的show()方法.
实际类型中也就是类B中可以没有这个show()方法,但是形式类型也就是类A中必须有这个方法,否则编译是通不过的!!!