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

你可能感兴趣的:(笔记,java,开发语言)