%module abstract_access %warnfilter(SWIGWARN_LANG_DIRECTOR_ABSTRACT) A; %inline %{ class A { public: virtual ~A() { } private: virtual int x() = 0; protected: virtual int y() = 0; public: virtual int z() = 0; int do_x() { return x(); } }; class B : public A { private: virtual int x() { return y(); } }; class C : public B { protected: virtual int y() { return z(); } }; class D : public C { private: virtual int z() { return 1; } }; %}