子类与父类之间的转换

class A {
	
	public void fun1() {
		System.out.println(" A fun1 is calling!!!");
	}
	
	public void fun2() {
		fun1();	
	}
	
}

class B extends A{
	
	public void fun1() {
		System.out.println(" B fun1 is calling!!!");
	}	
	
	public void fun3() {
		System.out.println(" B fun3 is calling!!!");	
	}
	
}

class Test {
	
	public static void main(String[] args) {
			A a = new A();
			callA(a);
			
			//子类可以隐式转换成父类,但父类不能隐式转换成子类(如果非要转可以采用强制类型转换)
			//象下面
			A c = new B();   //象这样一句是没有问题的
			//B d = new A(); //象这样一句编译时就会报 "不兼容的类型" 错误
			B e = (B)new A(); //象这样一句采用了强制类型转换虽编译时不会报错,但在运行时就会报 
			                  //"java.lang.ClassCastException" 错误
	}
	public static void callA(A a) {
		
		B b = null;
		if(a instanceof B) {
			b = (B)a;	
			b.fun1();
			b.fun2();
			b.fun3();	
		}else {
			a.fun1();
			a.fun2();	
		}
	}
}

 

你可能感兴趣的:(C++,c,C#)