public class TestOverloading{
void m(int i){
System.out.println("int");
}
void m(byte b){
System.out.println("byte");
}
void m(short s){
System.out.println("short");
}
void m(double b){
System.out.println("double");
}
void m(long b){
System.out.println("long");
}
void m(A a){
System.out.println("Class A");
}
void m(B b){
System.out.println("Class B");
} public static void main(String[] args){
TestOverloading tol=new TestOverloading();
A a=new B();
tol.m(a);
}}class A{}
class B extends A{}这句话什么意思呀??A a=new B();
谁能给解释下这个程序,谢谢了
void m(int i){
System.out.println("int");
}
void m(byte b){
System.out.println("byte");
}
void m(short s){
System.out.println("short");
}
void m(double b){
System.out.println("double");
}
void m(long b){
System.out.println("long");
}
void m(A a){
System.out.println("Class A");
}
void m(B b){
System.out.println("Class B");
} public static void main(String[] args){
TestOverloading tol=new TestOverloading();
A a=new B();
tol.m(a);
}}class A{}
class B extends A{}这句话什么意思呀??A a=new B();
谁能给解释下这个程序,谢谢了
class B extends A{}A a=new B();
子类转换为父类(自动转换)oop的多态性
B a=new (B)A();
是不是不能自动转换?class A{}
class B {}A a=new B();
应该不行吧
是不是不能自动转换?class A{}
class B {}A a=new B();
应该不行吧
是不行的。就好像B类是狗。我类是狼。你不能把狗定义为狼。
{
B b=(B)a;
}
在继承的关系下,是可行的。其中new B()创建了一个B类的实例,并将这个实例赋值于A类的一个引用,可以理解为B包涵与A.在运行时void m(A a)的参数是根据引用来确定调用方法.
摘自《Java程序设计》 主编:蔡翠平 编著:唐大仕 Page:115
-----------------------------------------上溯造型:
类似于基本数据类型数据之间的强制类型转换,存在继承关系的父类对象引用和子类对象引用之间也可以在一定条件下相互转换。父类对象和子类对象的转化需要注意如下原则。
注意:
1. 子类对象可以被视为其父类的一个对象。 如一个Student对象也是一个Person对象。
2. 父类对象不能被当做其某一个子类的对象。
3. 如果一个方法的形式参数定义是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数。
4. 如果父类对象引用指向的实际是一个子类对象,那么这个父类对象的引用可以用强制类型转换转化成子类对象的引用。
其中,把派生类当做它的基本类型处理的过程,又称为“Upcasting”(上溯造型)。-----------------------------------------
楼主所说的问题应该就是第一点;小弟不明白的是:它的第四点应该怎样理解,请哪位大侠用个实例解释一下。谢谢!
谢谢楼上huyc_fly的解说,小弟有些明白了。 :)