Internal learning

Member inner class

public class Inner {

    	public class Heart{ //Member inner class

		}

}

The Inner class is an external class

Internal classes can access the properties and methods of external classes unconditionally, but if external classes want to access the properties and methods of internal classes, they must first create the objects of internal classes, through which they can access the properties and methods of internal classes

public class Inner {//This is an external class
	public int OutNum1 =1;
	protected int OutNum2 =2;	
	int OutNum3 =3;
	private int OutNum4 =4;
	
	public Inner() {
		
		Heart heart=new Heart();//To access an internal class, first create an object
		System.out.println("Inner class InNum1 yes"+heart.InNum1);
		System.out.println("Inner class InNum2 yes"+heart.InNum2);
		System.out.println("Inner class InNum3 yes"+heart.InNum3);
		System.out.println("Inner class InNum4 yes"+heart.InNum4);
		heart.name();
		
	}
	
	public class Heart{ //Member inner class
		
		public int InNum1 =1;
		protected int InNum2 =2;	
		int InNum3 =3;
		private int InNum4 =4;	
				
		public void name() {
			System.out.println("It's an internal approach.");
			System.out.println("External class OutNum1 yes"+OutNum1);//Direct access to properties and methods of external classes
			System.out.println("External class OutNum1 yes"+OutNum2);
			System.out.println("External class OutNum1 yes"+OutNum3);
			System.out.println("External class OutNum1 yes"+OutNum4);
			
		}
	}

    public static void main(String[] args) {
    	
    	Inner inner=new Inner();
    }
}

The output results are as follows:

There are two ways to call internal classes:

    public static void main(String[] args) {
    	
    	Inner inner=new Inner();//Indirectly calling methods of inner classes
    	inner.name();
    	
    	Inner.Heart heart=new Inner().new Heart();//Calling methods of inner classes directly
    	heart.name();
    }

Static inner class

The static members of a class exist independently of any object of the class. Creating a static internal class object of a class does not need to depend on its external class object.

public class Inner {
	public int OutNum1 =1;
	protected int OutNum2 =2;	
	int OutNum3 =3;
	private int OutNum4 =4;
	
	public Inner() {
		
		Heart heart=new Heart();
		System.out.println("Inner class InNum1 yes"+heart.InNum1);
		System.out.println("Inner class InNum2 yes"+heart.InNum2);
		System.out.println("Inner class InNum3 yes"+heart.InNum3);
		System.out.println("Inner class InNum4 yes"+heart.InNum4);
		heart.name();
		
		StaticHeart staticHeart=new StaticHeart();
		System.out.println("Static inner class StaticNum1 yes"+staticHeart.StaticNum1);
		System.out.println("Static class StaticNum2 yes"+staticHeart.StaticNum2);
		System.out.println("Static class StaticNum3 yes"+staticHeart.StaticNum3);
		System.out.println("Static class StaticNum4 yes"+staticHeart.StaticNum4);
		heart.name();
		
	}

	static class StaticHeart{ //Static member inner class
		
		public int StaticNum1 =1;
		protected int StaticNum2 =2;	
		int StaticNum3 =3;
		private int StaticNum4 =4;	
		static int StaticNum5=5;//static property can be defined
				
		public void name() {
			System.out.println("This is a static inner class");
			//System.out.println("the external class OutNum1 is" + OutNum1);

			
		}
	}

}

Static internal classes cannot access the non static members of external classes. External non static members belong to each external class pair, but static internal classes exist independently of external class objects. Therefore, static internal classes cannot access the non static members of external classes, but external classes can access all members of access permissions of static internal classes.

Anonymous Inner Class

If the implementation class of the interface or the subclass of the parent class only needs to be used once, the definition of the class can be omitted and the anonymous inner class can be used instead.

Define an interface and its implementation class:

public interface MyIterface {
	
		public abstract void mewthod();
		
}
public class MyImpl implements MyIterface {

	@Override	
	public void mewthod() {
		// Method stubs generated automatically by TODO
		System.out.println("Implementation class override overrides methods");
		System.out.println("=================");
	}
	
}

Common writing:

	public static void main(String[] args) {
		MyImpl myImpl=new MyImpl();
		myImpl.mewthod();
		
		MyIterface myIterface=new MyImpl();//Use of upward transformation
		myIterface.mewthod();

		}

How to write anonymous inner class:

		//Anonymous Inner Class 
		MyIterface obj=new MyIterface() {
			
			@Override
			public void mewthod() {
				// Method stubs generated automatically by TODO
				System.out.println("Anonymous inner class implements methods A");
			}
		};
		obj.mewthod();
		
		//Anonymous inner class is used and the object name is also anonymous.
		new MyIterface() {
			
			@Override
			public void mewthod() {
				// Method stubs generated automatically by TODO
				System.out.println("Anonymous inner class implements methods B");
			}
		}.mewthod();
		

 

Posted by echelon2010 on Thu, 24 Oct 2019 06:37:15 -0700