zoukankan      html  css  js  c++  java
  • 多态




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

    • 多态的语法格式:

      父类类名 引用名称 = 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。




  • 相关阅读:
    原生JS中apply()方法的一个值得注意的用法
    关于“float”的一次探索--遇到了一个span元素可以设置宽高引发的思考
    git常用命令
    react 项目全家桶构件流程
    vue回顶部 组件 可以直接使用
    vscode左边侧边栏字体的大小
    小程序的福音,
    Android实战技巧:Dialog (转)
    给Android 应用开发者的十个建议(转)
    多线程与异步的区别(转)
  • 原文地址:https://www.cnblogs.com/huochemeiyouhuo/p/12170047.html
Copyright © 2011-2022 走看看