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