上面代码输出结果为 B C 0 4
多态的前提
A:类与类(或接口)要有继承(或实现)关系。
B:一定要有方法的重写。
C:一定要有父类或者接口的引用指向子类的对象
上面的代码没有方法从写,只有成员变量的名一样,但是还是形成多态,Why ?作者: 爱翚 时间: 2014-4-25 23:10
class Super {
int i = 0;
public Super(String a) {
System.out.println("A");
i = 1;
}
public Super() {
System.out.println("B");
}
}
class Demo extends Super {
int i = 10;
public Demo(String a) {
super();
i = 5;
System.out.println("C");
}
}
class Test {
public static void main(String[] args) {
int i = 4;
/*
* 在实例化Demo类对象时调用了Demo类中的Demo(String a)这个构造函数
* 而这个构造函数又通过super()调用了父类的构造函数,所以第一步输出"B"
* 然后调用Demo类Demo(String a)这个构造函数函数中的打印方法输出"C"
*/
Super d = new Demo("A");
在整个实现中只用到了多态的一个特性,即向上转型.也就是Super d = new Demo("A");这句代码.
其它代码都没有使用到多态的特性. 作者: 爱翚 时间: 2014-4-25 23:15
class Super {
int i = 0;
public Super(String a) {
System.out.println("A");
i = 1;
}
public Super() {
System.out.println("B");
}
}
class Demo extends Super {
int i = 10;
public Demo(String a) {
super();
i = 5;
System.out.println("C");
}
}
class Test {
public static void main(String[] args) {
int i = 4;
/*
* 在实例化Demo类对象时调用了Demo类中的Demo(String a)这个构造函数
* 而这个构造函数又通过super()调用了父类的构造函数,所以第一步输出"B"
* 然后调用Demo类Demo(String a)这个构造函数函数中的打印方法输出"C"
*/
Super d = new Demo("A");
作者: 大恶魔先森~ 时间: 2014-4-26 00:11
Super d=new Demo("A");定义了一个父类类型的引用指向一个子类的对象,这个本身就是多态的向上转型特性。作者: 四川男人 时间: 2014-4-26 00:54
class Super{
int i=0;
public Super(String a){
System.out.println("A");
i=1;
}
public Super(){
System.out.println("B");
}
}
class Demo extends Super{
int i=10;
public Demo(String a){
super();
i=5;
System.out.println("C");
}
}
class Test{
public static void main(String[] args){
int i=4;
Super d = new Demo("A"); //这里,父类对象用子类来实例化。多态主要是对非静态方法实现动态绑定,这里使用的是子类的构造方法
//Demo的构造方法第一句是super,然后进入父类的无参构造,输出B,然后回来,i=5,输出C
System.out.println(d.i); //父类对象调用父类成员,所以d.i输出是0。。。。。也用到了多态,编译的时候,首先去看父类是否存在i,不存在编译就报错
System.out.println(i); //这里输出局部变量i=4;
}
} 作者: ς高眼光の目标 时间: 2014-4-26 02:26
老毕说的很清楚的