多态and内部类(java)

简介: 多态and内部类(java)

多态and内部类(java)


多态

父类作为方法的参数 掌握

package com.qfedu.duotai3;
/**
 * 奥特曼欺负各种各样的小动物
 * @author renrui
 *
 */
public class App {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Outman laotie = new Outman();
    Dog dog = new Dog();
    Cat cat = new Cat();
    laotie.beatAnimal(dog);
    laotie.beatAnimal(cat);
  }
}
class Outman {
  // 方法的参数用的是父类的类型
  public void beatAnimal(Animal animal) {
    animal.beaten();
  }
}
abstract class Animal {
  public abstract void beaten();
}
class Dog extends Animal {
  // 被打
  @Override
  public void beaten() {
    System.out.println("奥特曼都敢欺负到我头上了,咬死你");
  }
}
class Cat extends Animal {
  @Override
  public void beaten() {
    System.out.println("敢打我,挠花你的脸");
  }
}

父类或者接口作为返回

简单工厂模式

创建对象,要创建的对象由相同的父类,或者有相同接口

根据不同状态,创建不同的对象

package com.qfedu.factory;
public class App {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    // 通过接口类型的变量引用不同实现类的对象
    IPay aliPay = PayFactory.createPay(PayConstants.PAY_TYPE_ALI);
    aliPay.pay();
    IPay wxPay = PayFactory.createPay(PayConstants.PAY_TYPE_WX);
    wxPay.pay();
  }
}
interface IPay {
  // 支付
  void pay();
}
class WxPay implements IPay {
  @Override
  public void pay() {
    // TODO Auto-generated method stub
    System.out.println("使用微信支付");
  }
}
class AliPay implements IPay {
  @Override
  public void pay() {
    // TODO Auto-generated method stub
    System.out.println("使用支付宝支付");
  }
}
// 简单工厂设计模式
// 体现多态思想
// 工厂类,根据不同的状态,返回不同的支付对象
class PayFactory {
  // 1 表示支付宝 2表示微信
  public static IPay createPay(int payType) {
    if(payType == PayConstants.PAY_TYPE_ALI) {
      IPay aliPay = new AliPay();
      return aliPay;
      // return new AliPay();
    } else if(payType == PayConstants.PAY_TYPE_WX) {
      IPay wxPay = new WxPay();
      return wxPay;
      // return new WxPay();
    } else {
      System.out.println("参数有误");
      return null;
    }
  }
}
// 常量类
class PayConstants {
  // 支付宝支付
  public static final int PAY_TYPE_ALI = 1;
  // 微信支付
  public static final int PAY_TYPE_WX = 2;
}

微信支付

支付宝支付

不会写两个不同的方法:

payWithWx()

payWithAlipay()

payWithPaypal()

payWIthIosNeigou()

内部类 了解

成员内部类、静态内部类、局部内部类 了解

匿名内部类 掌握

基本语法:

new 接口或者抽象类() {

重写抽象方法

};

很多情况下,将匿名内部类作为参数使用

package com.qfedu.anymous2;
public class App {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Outman outman = new Outman();
    Animal dog = new Animal() {
      @Override
      public void beaten() {
        // TODO Auto-generated method stub
        System.out.println("wang");
      }
    };
    outman.beatAnimal(dog);
    // 匿名内部类作为参数进行传递
    outman.beatAnimal(new Animal() {
      @Override
      public void beaten() {
        // TODO Auto-generated method stub
        System.out.println("miao");
      }
    });
    outman.beatAnimal(new Animal() {
      @Override
      public void beaten() {
        // TODO Auto-generated method stub
        System.out.println("嗷呜");
      }
    });
  }
}
abstract class Animal {
  public abstract void beaten();
}
class Outman {
  public void beatAnimal(Animal animal) {
    animal.beaten();
  }
}
相关文章
|
1月前
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第10天】Java零基础教学篇,手把手实践教学!
23 4
|
1月前
|
Java 编译器 程序员
Java多态背后的秘密:动态绑定如何工作?
本文介绍了Java中多态的实现原理,通过动态绑定和虚拟方法表,使得父类引用可以调用子类的方法,增强了代码的灵活性和可维护性。文中通过具体示例详细解析了多态的工作机制。
42 4
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
1月前
|
Java
java继承和多态详解
java继承和多态详解
43 5
|
1月前
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第1天】Java零基础教学篇,手把手实践教学!
29 1
|
1月前
|
安全 Java 编译器
【一步一步了解Java系列】:重磅多态
【一步一步了解Java系列】:重磅多态
20 3
|
2月前
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
67 9
Java——类与对象(继承和多态)
|
2月前
|
Java
Java 多态趣解
在一个阳光明媚的午后,森林中的动物们举办了一场别开生面的音乐会。它们组成了一支乐队,每种动物都有独特的演奏方式。通过多态的魅力,狗、猫和青蛙分别展示了“汪汪”、“喵喵”和“呱呱”的叫声,赢得了观众的阵阵掌声。熊指挥着整个演出,每次调用 `perform()` 方法都能根据不同的动物对象唤起对应的 `makeSound()` 方法,展现了 Java 多态性的强大功能,让整场音乐会既有趣又充满表现力。
|
1月前
|
Java 编译器
【Java】内部类
【Java】内部类
22 0
|
3月前
|
安全 Java 编译器
下一篇
无影云桌面