package Demo23;
/*
自己定义的类也可以作为成员变量
*/
public class Hero {
private String name;//英雄名字
private Weapon weapon;//武器
private int age;//年龄
public Hero(){}
public Hero(String name, Weapon weapon, int age){
this.name = name;
this.weapon = weapon;
this.age = age;}
public void attack(){
System.out.println("年龄为" + age + "的" +name + "用" + weapon.getCode() + "攻击敌方");}
public String getName(){return name;}
public void setName(String name){
this.name = name;}
public Weapon getWeapon(){return weapon;}
public void setWeapon(Weapon weapon){
this.weapon = weapon;}
public int getAge(){return age;}
public void setAge(int age){
this.age = age;}}
package Demo23;
public class DemoMain {
public static void main(String[] args){
//创建一个英雄角色
Hero hero = new Hero();
//起名字,设置年龄
hero.setName("盖伦");
hero.setAge(20);
Weapon weapon = new Weapon("多兰剑");
//为英雄配武器
hero.setWeapon(weapon);
hero.attack();}}
package Demo23;
public class Weapon {
private String code;//武器的代号
public Weapon(){}
public Weapon(String code){
this.code = code;}
public String getCode(){return code;}
public void setCode(String code){
this.code = code;}}
package Demo23;
//自定义的接口作为成员变量名称
public class Hero1 {
private String name;
private Skill skill;
public Hero1(){}
public Hero1(String name, Skill skill){
this.name = name;
this.skill = skill;}
public void attack(){
System.out.println("我叫" + name + ", 开始释放技能");
skill.use();
System.out.println("完成");}
public String getName(){return name;}
public void setName(String name){
this.name = name;}
public Skill getSkill(){return skill;}
public void setSkill(Skill skill){
this.skill = skill;}}
package Demo23;
public class DemoGameMain {
public static void main(String[] args){
Hero1 hero = new Hero1();
hero.setName("艾希");
hero.setSkill(new SkillImpl());//使用单独定义的实现类
//还可以改成使用匿名内部类
Skill skill = new Skill(){
@Override
public void use(){
System.out.println("Pia`Pia`pia");}};
hero.setSkill(skill);
//同时使用匿名内部类和匿名对象
hero.setSkill(new Skill(){
@Override
public void use(){
System.out.println("bababba");}});
hero.attack();}}
package Demo23;
public class SkillImpl implements Skill {
@Override
public void use(){
System.out.println("Biu Biu Biu");}}
package Demo23;
public interface Skill {
void use();//释放技能的抽象方法
}
package Demo23;import java.util.ArrayList;import java.util.List;
/*
java.util.List正是ArrayList所实现的接口。
*/
public class DemoInterface {
public static void main(String[] args){
//左边是接口名称,右边是实现类名称,这就是多态的写法
List<String> list = new ArrayList<>();
List<String> result = addName(list);for(int i = 0; i < result.size(); i++){
System.out.println(result.get(i));}}
public static List<String> addName(List<String> list){
list.add("迪丽热巴");
list.add("古力娜扎");
list.add("玛尔扎哈");
list.add("撒由那拉");return list;}}