48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(root,				% avoid infinite metaclass regression by
							 | 
						||
| 
								 | 
							
									instantiates(root)).	% making the class its own metaclass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(method/0).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									method :-
							 | 
						||
| 
								 | 
							
										this(This),
							 | 
						||
| 
								 | 
							
										write('This is the default definition for the method, stored in class '),
							 | 
						||
| 
								 | 
							
										writeq(This), write('.'), nl.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(instance1,		% this instance simply inherits the method/0 predicate
							 | 
						||
| 
								 | 
							
									instantiates(root)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(instance2,		% this instance provides its own definition for the
							 | 
						||
| 
								 | 
							
									instantiates(root)).	% method/0 predicate
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									method :-
							 | 
						||
| 
								 | 
							
										this(This),
							 | 
						||
| 
								 | 
							
										write('This is an overriding definition stored in the '),
							 | 
						||
| 
								 | 
							
										writeq(This),
							 | 
						||
| 
								 | 
							
										write(' instance itself.'), nl.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(instance3,		% this instance specializes the inherited definition
							 | 
						||
| 
								 | 
							
									instantiates(root)).	% of the method/0 predicate
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									method :-
							 | 
						||
| 
								 | 
							
										this(This),
							 | 
						||
| 
								 | 
							
										write('This is a specializing definition stored in the '),
							 | 
						||
| 
								 | 
							
										writeq(This),
							 | 
						||
| 
								 | 
							
										write(' instance itself.'), nl,
							 | 
						||
| 
								 | 
							
										write('It makes a super call to execute the default definition:'), nl, nl,
							 | 
						||
| 
								 | 
							
										^^method.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 |