class Car{
public void Car1(){
System.out.println("this is car fangfa");
}
public static void main(String[]args){
}
public int a = 11;
public int b = 111;
}public class Bmw extends Car{
public int a =22;
public int c =222;
public void Car1(){
System.out.println("this is bmw fangfa");
}
public static void main(String[]args){
Car t = new Bmw(); //这个我理解,多态.这里感谢下帮助过我的大侠~
/*
这个书上说是强制类型转换,我不太理解.
既然是用m调用Bmw里Car1方法,那直接Bmw m = new Bmw()不更好吗?干嘛要Bmw m =(Bmw)t,这么麻烦呢?
或者说有什么好处呢?请各位大侠详细解释下.
*/
Bmw m =(Bmw)t;
m.Car1()
举个例子,有如下代码:
Car t = new Bmw();
Car s = new Toyota();
void method(Car car){car.a1;}
这时候,利用多态,t和s都可以作为参数传给method方法,然后在method内部去调用各自的a1方法
如果没有多态:
Bmw t = new Bmw();
Toyota s = new Toyota();
那么这时候,就无法写一个像上面那样的方法来统一调用不同子类的Car的a1方法 另外,强制类型转换前,通常做一个检查比较好:
if (t instanceof Bmw)
Bmw m = (Bmw)t;
这个例子中t和Bmw的关系比较明显,可能不是很有必要做这个检查,但有些复杂情况下还是很有必要的
另外,强制类型转换前,通常做一个检查比较好:
if (t instanceof Bmw)
Bmw m = (Bmw)t;
这个例子中t和Bmw的关系比较明显,可能不是很有必要做这个检查,但有些复杂情况下还是很有必要的
楼上的这个 instanceof只有 向上传型时才 需要。。的
可能我说的不太清楚,我其实是想问,
Bmw m =(Bmw)t;
m.Bmw别的方法我好象突然明白了.
Car t = new Bmw();
Bmw m =(Bmw)t
m.Bmw别的方法
意思就是说我用t可以调Bmw其余的方法.(也就是说和父类Car不一样的方法,即没有覆盖的方法.)
如果父类里本身没有Bmw别的方法重载的方法,那么用父类引用t是无法调用这些方法的