多态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();
  }
}
相关文章
|
6天前
|
Java
Java 新手入门:Java 封装、继承、多态详解
Java 新手入门:Java 封装、继承、多态详解
16 1
|
11天前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
25 5
|
5天前
|
Java
Java多态初探
Java多态初探
8 0
|
5天前
|
Java
【Java】内部类、枚举、泛型
【Java】内部类、枚举、泛型
|
5天前
|
设计模式 Java 程序员
【Java】多态
【Java】多态
|
1月前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
26 6
|
1月前
|
Java 开发者
【Java探索之旅】初识多态_概念_实现条件
【Java探索之旅】初识多态_概念_实现条件
43 16
|
1月前
|
Java 数据安全/隐私保护
Java中的类继承与多态详解
Java中的类继承与多态详解
|
1月前
|
Java
Java面向对象 ( 多态 | final关键字 | 接口 )
Java面向对象 ( 多态 | final关键字 | 接口 )
|
2月前
|
Java
一篇文章讲明白Java中内部类详解—匿名内部类
一篇文章讲明白Java中内部类详解—匿名内部类
19 2