यदि आपके पास एक अमूर्त वर्ग है तो आप इसे एक ठोस अज्ञात वर्ग प्राप्त करके तुरंत चालू कर सकते हैं। यह एक उदाहरण है:जावा में क्लास ऑब्जेक्ट में संग्रहीत एक अमूर्त वर्ग को अनामित रूप से कैसे प्रारंभ करें?
abstract class A {
abstract void hello();
}
A say = new A() { void hello() { System.out.println ("hello"); } }
say.hello(); // -> hello
क्लास ऑब्जेक्ट में कक्षा संग्रहीत होने पर ऐसा कैसे करें?
// -*- compile-command: "javac anon.java && java anon"; -*-
class anon
{
anon() throws Exception {}
abstract class AbstractClass
{
AbstractClass() throws Exception {}
abstract void id();
}
AbstractClass x = new AbstractClass()
{
void id() { System.out.println ("X"); }
};
Class<AbstractClass> abstractclass
= (Class<AbstractClass>)Class.forName ("anon$AbstractClass");
AbstractClass y = abstractclass.getConstructor().newInstance();
public static void main (String argv[]) throws Exception
{
anon main = new anon();
main.x.id(); // should print "X"
main.y.id(); // should print "Y"
}
}
पहले इन्स्टेन्शियशन (एक्स) काम करता है ठीक लेकिन दूसरे (y) में विफल रहता है, क्योंकि यह एक ठोस वर्ग पाने के बिना सीधे सार वर्ग का दृष्टांत की कोशिश करता है: यहाँ एक उदाहरण है। मैं जावा में केवल क्लास ऑब्जेक्ट के साथ ऐसा कैसे कर सकता हूं?
रुको। क्या आपने पहले कोड के साथ दूसरे तरीके को लागू करने का प्रयास किया था? मुझे लगता है कि यह वहां भी काम नहीं करेगा। आप इस तरह एक अमूर्त वर्ग को तुरंत चालू करने की कोशिश क्यों कर रहे हैं? जब आप एक अज्ञात वर्ग बनाते हैं, तो आप वास्तव में अपनी अमूर्त कक्षा का विस्तार कर रहे हैं और इसे तत्काल बना रहे हैं, न कि अमूर्त वर्ग स्वयं। –
कोई y.id() "वाई" मुद्रित करना चाहिए। – ceving
@ceving .. क्या आप मेरी टिप्पणी समझ गए थे? –