接口作为成员变量类型

package Yasuo;

public class Gay {
    private String name;
    private Skill skill;

    public Gay() {
    }

    public Gay(String name, Skill skill) {
        this.name = name;
        this.skill = skill;
    }

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

    public void attack() {
        System.out.println(getName() + "使用技能: ");
        skill.use();
        System.out.println("技能使用完毕");
    }
}
package Yasuo;

public interface Skill {
    void use();
}
package Yasuo;

public class SkillImpl implements Skill {

    @Override
    public void use() {
        System.out.println("斩钢闪");
    }
}
package Yasuo;

public class demo2main {
    public static void main(String[] args) {
        Gay gay = new Gay();
        gay.setName("亚索");
        Skill skill = new SkillImpl();  //或者直接 gay.setSkill(new SkillImpl);
        gay.setSkill(skill);
        gay.attack();

        System.out.println("=============");

        Skill skill2 = new Skill() {
            @Override
            public void use() {
                System.out.println("狂风绝息斩");
            }
        };
        gay.setSkill(skill2);
        gay.attack();

        System.out.println("============");

        gay.setSkill(new Skill() {
            @Override
            public void use() {
                System.out.println("踏前斩");
            }
        });
        gay.attack();
    }
}

原文地址:https://www.cnblogs.com/aoligei/p/12411371.html

时间: 2024-10-10 10:03:21

接口作为成员变量类型的相关文章

JavaSE8基础 接口的成员变量只能是静态的常量

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        代码: //接口的成员变量只能是静态的常量. interface PersonTrain{ //默认修饰符public static final public static final int num = 1;//推荐写法,帮人帮己 public int num2 = 2; public final int num3

接口作为成员变量——实现类和匿名内部类和匿名对象

声明定义的接口: 主体类: 其中接口作为成员变量,在这个主体类的成员方法中调用了这个接口的抽象方法,会自动找到这个这个接口实现类的覆盖重写的方法,避免多个实现类不同的覆盖重写,所以如果用实现类类实现的话都是直接传参该实现类就行: 其中,用实现类的时候,入参为接口的时候直接传入它的实现类,jvm会自动实现向上转型,继承和实现都有向上转型,原理可以看作一样:但是java是单继承.多实现的: 实现类只使用了一次,可以使用匿名内部类: 匿名内部类创建出来的对象也只调用了一个方法,可以使用匿名内部类的匿名

java接口中成员变量和方法的默认修饰符(转)

Java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final String name = "张三"; 2:String name = "张三"; 以上两种都可以,老司机一般都是第二种.既然是静态最终的变量,也就意味着在外面访问的时候不能修改这个成员变量的值.所以在接口中定义成员变量的,一般都是常量.不会修改的.如果要进行修改的话,定义

java类同时引用父类和接口的成员变量,需要指明是父类的还是接口的

code: package com.qhong; public class Main extends B implements A{ public static void main(String[] args) throws Exception { new Main().action();; } public void action(){ System.out.println(super.x); System.out.println(A.x); //System.out.print(x); }

Objective-C Runtime 运行时之二:成员变量与属性

类型编码(Type Encoding) 作为对Runtime的补充,编译器将每个方法的返回值和参数类型编码为一个字符串,并将其与方法的selector关联在一起.这种编码方案在其它情况下也是非常有用的,因此我们可以使用@encode编译器指令来获取它.当给定一个类型时,@encode返回这个类型的字符串编码.这些类型可以是诸如int.指针这样的基本类型,也可以是结构体.类等类型.事实上,任何可以作为sizeof()操作参数的类型都可以用于@encode(). 在Objective-C Runti

runtime第二部分成员变量和属性

接上一篇 http://www.cnblogs.com/ddavidXu/p/5912306.html 转载来源http://www.jianshu.com/p/6b905584f536 http://southpeak.github.io/2014/10/30/objective-c-runtime-2/ 比较实用的内容都用颜色的字标记,并配有代码,并在末尾放上代码demo. 类型编码(Type Encoding) Objective-C不支持long double类型.@encode(lon

Runtime之成员变量&属性&关联对象

上篇介绍了Runtime类和对象的相关知识点,在4.5和4.6小节,也介绍了成员变量和属性的一些方法应用.本篇将讨论实现细节的相关内容. 在讨论之前,我们先来介绍一个很冷僻但又很有用的一个关键字:@encode 1.类型编码 为了协助运行时系统,编译器用字符串为每个方法的返回值.参数类型和方法选择器编码,使用的编码方案在其他情况下也很有用.在 Objective-C 运行时的消息发送机制中,传递参数时,由于类型信息的缺失,需要类型编码进行辅助以保证类型信息也能够被传递.在实际的应用开发中,使用案

JAVA类与对象(四)----成员变量与局部变量 、成员方法、构造方法

类体中的变量分为两部分.变量定义部分定义的变量为类的成员变量,在方法体中定义的变量和方法中涉及的变量称为局部变量. 成员变量和局部变量的区别: (1).成员变量在整个类中都有效,局部变量只在定义它的方法中有效 (2).成员变量分为实例成员变量(简称实例变量)和类变量(简称静态变量),如果在成员变量类型前加static,这个变量就称为类变量. (3).如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏 ,也就是说,这个成员变量在这个方法中暂时失效. 例: public class Benso

Java--Reflect(反射)专题4——获取成员变量以及构造函数信息

转载请注明:http://blog.csdn.net/uniquewonderq 首先写一个获取成员变量的静态方法: 成员变量也是对象, 是java.lang.reflect.Field类的对象 Field类封装了关于成员变量的操作 getFields()获取的是所有的public的成员变量的信息 getDeclaredFields()获取的是该类自己声明的成员变量的信息,可能是私有的也可能是共有的 public static void printFieldMessage(Object obj)