面向对象(二)

多态:同一个符号在不同语义环境下具有不同的解释

      1、接口和实现接口并覆盖接口中同一个方法的几种不同的类体现的。

    2、父类和继承父类并覆盖父类中同一方法的几个不同子类实现的。

基本概念

       多态性:在同一个时刻,体现出来的不同状态;

      通过将子类对象引用赋值给父类对象引用变量来实现动态方法调用

      1、如果a是类A的一个引用,那么a可以指向类A的一个实例,或者说指向类A的一个子类。

      2、如果a是接口A的一个引用,那么a必须指向实现了接口A的一个类的实例。

class Fu{
	int num = 20 ;
	public void show() {
		System.out.println("show Fu....");
	}
	public Fu(){
		
	}
	
	public static void function() {
		System.out.println("function Fu...");
	}
}
//子类
class Zi extends Fu{
	int num = 30 ;
	
	public void show() {
		System.out.println("show Zi....");
	}
	
	public static void function() {
		System.out.println("function Zi...");
	}
	
	public void method() {
		System.out.println("----4");
	}
}

//测试类
public class DuoTaiDemo {

	public static void main(String[] args) {
		//创建对象,通过子类创建对象
		Fu f = new Zi() ;
		
		System.out.println(f.num);
		f.show();
		f.function();
	}
}

向上转型

           子类自有的方法不可见

         1)、代码检查不允许。

         2)、从实际意义上

  1. A a = new B();  
  2. a.f();     //调用子类的f()方法  
  3. a.f(new Two());    //编译错误(定义一个A类引用,JVM解释a.f(new Two())方法时,A类没有这个方法)  

向下转型

          存在于继承中,父类引用指向的对象实际是要转型的子类引用的类型。

  1. 1)  Animal a = new Dog();  
  2.   
  3.       Dog d = (Dog) a;    //正确  
  4.   
  5. 2) Animal a = new Cat();  
  6.   
  7.       Dog d = (Dog) a;    //抛异常    





 


   

  

猜你喜欢

转载自blog.csdn.net/fnwibwj/article/details/79997179