综合案例练习
案例需求
股票投资者:姓名、年龄、学炒股、说英语基金投资者:姓名、年龄、学炒基股票经理:姓名、年龄、教炒股、说英语基金经理:姓名、年龄、教炒基请用所学知识,设计出哪些类,哪些接口?
案例分析:
分析一如下:
按照投资类型分析:首先由题定义Person抽象父类其中为属性:nameage枚举属性方法行为为:Jude判断方法studyteach方法全部定义为抽象方法,让子类重写定义枚举类:身份枚举对象:INVESTOR,MANAGER;//投资者与经理定义股票实现与继承子类:重写父类抽象方法子类特有Speak英语方法定义基金实现与继承子类:重写父类抽象方法定义Test测试类测试需求
代码实现如下:
Person类:
package com.feisi.work15.Fund1;
/**
* @author 14491
* @version 1.0.0
* @description TODO
* @date 2022/7/28 12:33
*/
public abstract class Person {
String name;
int age;
Type type;
public Person(String name, int age, Type type) {
this.name = name;
this.age = age;
this.type = type;
}
// 判断方法
public abstract void Jude();
// 学习方法
public abstract void study();
// 教学方法
public abstract void teach();
}
枚举类:
package com.feisi.work15.Fund1;
public enum Type {
INVESTOR, MANAGER;// 投资者与经理
}
股票实现与继承子类:
package com.feisi.work15.Fund1;
public class Stock extends Person{
public Stock(String name, int age, Type type) {
super(name, age, type);
}
// 讲英语方法
public void SpeakEnglish() {
System.out.println(name + "讲英语");
}
// 判断身份类型调用不同方法
@Override
public void Jude() {
if (type == Type.INVESTOR) {
study();
} else if (type == Type.MANAGER) {
teach();
}
}
@Override
public void study() {
System.out.println(name + "学习炒股");
}
@Override
public void teach() {
System.out.println(name + "教炒股");
}
}
基金实现与继承子类:
package com.feisi.work15.Fund1;
public class Fund extends Person{
public Fund(String name, int age, Type type) {
super(name, age, type);
}
// 判断身份类型调用不同方法
@Override
public void Jude() {
if (type == Type.INVESTOR) {
study();
} else if (type == Type.MANAGER) {
teach();
}
}
@Override
public void study() {
System.out.println(name + "学习炒基金");
}
@Override
public void teach() {
System.out.println(name + "教炒基金");
}
}
测试类:
package com.feisi.work15.Fund1;
public class Test {
public static void main(String[] args) {
// 创建对象
Person fund = new Fund("小赵",20,Type.INVESTOR);
Person fund1 = new Fund("老赵",25,Type.MANAGER);
Person stock = new Stock("小明",20,Type.INVESTOR);
Person stock1 = new Stock("老明",35,Type.MANAGER);
show(fund);
show(fund1);
show(stock);
show(stock1);
}
public static void show(Person person){
if(person instanceof Fund){
person.Jude();
}else if(person instanceof Stock){
((Stock) person).SpeakEnglish();
person.Jude();
}
}
}
运行结果:
案例分析
按照身份类型划分:首先根据题目抽取定义Person父类:属性nameage投资类型枚举定义投资类型枚举类:FUND,STOCK;基金与炒股定义一个Speak接口:speak抽象方法,由实现类实现定义经理实现子类:teach子类特有方法定义投资实现子类:study子类特有法最后定义测试类测试
Person父类:
package com.feisi.work15.Investor2;
public class Person {
String name;
int age;
Type type;
public Person(String name, int age, Type type) {
this.name = name;
this.age = age;
this.type = type;
}
}
Type枚举类:
package com.feisi.work15.Investor2;
public enum Type {
FUND,STOCK;// 基金与股票
}
经理实现子类:
package com.feisi.work15.Investor2;
public class Manager extends Person implements Speak {
public Manager(String name, int age, Type type) {
super(name, age, type);
}
//
public void teach() {
if (type == Type.FUND) {
System.out.println(name + "教炒基金!!!");
} else {
speak();
System.out.println(name + "教炒股!!!");
}
}
@Override
public void speak() {
System.out.println(name + "说英语");
}
}
投资实现子类:
package com.feisi.work15.Investor2;
public class Investor extends Person implements Speak{
public Investor(String name, int age, Type type) {
super(name, age, type);
}
public void study(){
if (type == Type.FUND) {
System.out.println(name + "学炒基金!!!");
} else {
speak();
System.out.println(name + "学炒股!!!");
}
}
@Override
public void speak() {
System.out.println(name + "说英语");
}
}
Speak接口:
package com.feisi.work15.Investor2;
public interface Speak {
void speak();// 讲英语方法
}
测试类:
package com.feisi.work15.Investor2;
public class Test {
public static void main(String[] args) {
// 创建对象
Person investor = new Investor("小赵", 18, Type.FUND);
Person investor1 = new Investor("小明",19,Type.STOCK);
Person manager = new Manager("老赵",25,Type.FUND);
Person manager1 = new Manager("老明",26,Type.STOCK);
// 调用方法
show(investor);
show(investor1);
show(manager);
show(manager1);
}
// 根据存入对象参数去调用不同的方法
public static void show(Person person){
if(person instanceof Investor){
((Investor) person).study();
}else if (person instanceof Manager){
((Manager) person).teach();
}else {
System.out.println("传入的参数对象有误!!!");
}
}
}
运行结果:
案例分析
按照普通类划分:首先定义Person类将共同属性抽离:属性nameage接着定义4个子类分别是StockInvestors股票投资者类、FundInvestor基金投资者类、StockManager股票经理类、FundManager基金经理类然后定义3个接口里面的抽象方法分别是Studystudy方法、Teachingteaching教学方法SpeakspeakEnglish说英语方法最后由测试类测试
具体代码实现:
Person父类:
package com.feisi.work15;
public class Person {
String name;
int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
StockInvestors股票投资者类:
package com.feisi.work15;
public class StockInvestors extends Person implements Study, Speak {
public StockInvestors() {
}
public StockInvestors(String name, int age) {
super(name, age);
}
@Override
public void SpeakEnglish() {
if (name != null && age != 0) {
System.out.println(name + "说英语");
} else {
System.out.println("属性不可为空值");
}
}
@Override
public void study() {
if (name != null && age != 0) {
System.out.println(name + "学炒股");
} else {
System.out.println("属性不可为空值");
}
}
}
FundInvestor基金投资者类:
package com.feisi.work15;
public class FundInvestor extends Person implements Study{
public FundInvestor() {
}
public FundInvestor(String name, int age) {
super(name, age);
}
@Override
public void study() {
if (name != null && age != 0) {
System.out.println(name + "学炒基");
} else {
System.out.println("属性不可为空值");
}
}
}
StockManager股票经理类:
package com.feisi.work15;
public class StockManager extends Person implements Teaching,Speak{
public StockManager() {
}
public StockManager(String name, int age) {
super(name, age);
}
@Override
public void SpeakEnglish() {
if (name != null && age != 0) {
System.out.println(name + "说英语");
} else {
System.out.println("属性不可为空值");
}
}
@Override
public void teaching() {
if (name != null && age != 0) {
System.out.println(name + "教炒股");
} else {
System.out.println("属性不可为空值");
}
}
}
FundManager基金经理类:
package com.feisi.work15;
public class FundManager extends Person implements Teaching{
public FundManager() {
}
public FundManager(String name, int age) {
super(name, age);
}
@Override
public void teaching() {
if (name != null && age != 0) {
System.out.println(name + "教炒基");
} else {
System.out.println("属性不可为空值");
}
}
}
Study接口:
package com.feisi.work15;
public interface Study {
void study();
}
Teaching接口:
package com.feisi.work15;
public interface Teaching {
void teaching();
}
Speak接口:
package com.feisi.work15;
public interface Speak {
void SpeakEnglish();
}
测试类:
package com.feisi.work15;
public class Test {
public static void main(String[] args) {
// 创建对象
Person stockInvestors = new StockInvestors("股票投资者",20);
Person fundInvestor = new FundInvestor("基金投资者",24);
Person stockManager = new StockManager("股票经理",35);
Person fundManager = new FundManager("基金经理",36);
// 调用方法
show(stockInvestors);
show(fundInvestor);
show(stockManager);
show(fundManager);
}
// 根据传入对象参数调用不同方法
public static void show(Person person){
if(person instanceof StockInvestors){
((StockInvestors) person).study();
((StockInvestors) person).SpeakEnglish();
}else if(person instanceof FundInvestor){
((FundInvestor) person).study();
}else if(person instanceof StockManager){
((StockManager) person).teaching();
((StockManager) person).SpeakEnglish();
}else if(person instanceof FundManager){
((FundManager) person).teaching();
}else {
System.out.println("传入的参数对象有误!!!");
}
}
}
运行结果:
体会总结:
文章为作者独立观点,不代表股票交易接口观点