多态




多态:将多个对象调用同一个方法,得到不同的结果

  • 多态的语法格式:

    父类类名 引用名称 = new 子类类名();


  • 当是多态时,该引用名称只能访问父类中的属性和方法,但是优先访问子类重写以后的方法


  • 满足多态的条件:

    子类必须继承父类

    子类重写父类的方法

    父类类名 引用名称 = new 子类类名();


  • 多态好处

    减少代码的冗余性

    class Pet{
    	//方法
    	public void eat(){
    		System.out.println("宠物正在吃东西。。。。。。");
    	}
    }
    //编写狗的子类继承宠物父类
    class Dog extends Pet{
    	//重写父类的eat方法
    	public void eat(){
    		System.out.println("狗正在吃狗粮......");
    	}
    	//编写独有的方法:玩飞盘
    	public void play(){
    		System.out.println("狗正在玩飞盘。。。。。");
    	}
    }
    //编写猫的子类继承宠物父类
    class Cat extends Pet{
    	//重写父类的吃的方法
    	public void eat(){
    		System.out.println("猫正整吃猫粮。。。。。");
    	}
    	//编写独有的方法:抓老鼠
    	public void catching(){
    		System.out.println("猫正在抓老鼠......");
    	}
    }
    //编写主人类
    class Master{
    	//方法:喂养狗
    	/*public void feed(Dog dog){
    		dog.eat();
    	}
    	//方法:喂养猫
    	public void feed(Cat cat){  //Cat cat = new Cat();
    		cat.eat();
    	}*/
    	/*
    		总结得到:以上喂养的猫和狗都属于宠物,因此能否编写主人喂养宠物方法
    	*/
    	public void feed(Pet pet){ //Pet pet = new Dog();   Pet pet = new Cat();
    		pet.eat();
    	}
    }
    //编写测试类
    class Test{
    	public static void main(String[] args){
    		//创建主人对象
    		Master m = new Master();
    		//创建狗对象
    		Dog d = new Dog();
    		//主人喂养宠物
    		m.feed(d);
    		m.feed(new Cat());
    	}
    }
    

  • 多态中的两种类型转换

    • 向上转型,也叫做自动类型转换,构成多态

      • 父类类型 引用名称 = new 子类类名();
      • 当是多态时,该引用名称只能访问父类中的属性和方法,但是优先访问子类重写以后的方法
    • 向下转型,也叫做强制类型转换

      • 当是多态时,并且访问子类独有的属性或方法时,则必须进行向下转型

      • 当进行向下转型时,建议先进行判断,当合法则在转为对应的类型,则使用instanceof关键字,否则可能会出现类型转换异常java.lang.ClassCastExceptio

      • instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例

        boolean result = obj instanceof Class
        

          其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。




原文地址:https://www.cnblogs.com/huochemeiyouhuo/p/12170047.html