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();
}
}