Java 成员内部类、局部变量内部类、匿名内部类、访问修饰符

目录

一、成员内部类

二、局部变量内部类

三、匿名内部类

(1)接口中的匿名内部类

(2)抽象中的匿名内部类

四、访问修饰符


一、成员内部类


public class Person {
	boolean state = true;//生命状态
	
	public class Heart{
		public void jump(){
			System.out.println("我的心在扑通扑通的跳");
		}
	}
	
}

        * 创建内部类的对象格式:
         * 外部类名.内部类命  变量名 = new 外部类名().new 内部类名
         * 调用内部类成员格式:
         * 内部类对象名.成员名


public class Test {
	public static void main(String[] args) {
		//调用成员内部类
		/*
		 * 创建内部类的对象格式:
		 * 外部类名.内部类命  变量名 = new 外部类名().new 内部类名
		 * 调用内部类成员格式:
		 * 内部类对象名.成员名
		 */
		Person.Heart h = new Person().new Heart();
		//调用内部类的jump 方法
		h.jump();
		
	}
}

二、局部变量内部类

package demo5;

public class Outer {
	int a = 1;
	public void show(){
		 int a  =2;
		//局部内部类
		 class Inner{
			int a = 3;
			public void showA(){
				//打印outer a = 1
				System.out.println(Outer.this.a);

				//打印Inner a = 3;
				System.out.println(this.a);
			}
		}
		 Inner in  = new Inner();
		 in.showA();
	}

}

如何调用局部内部类中的方法?

在局部方法中创建对象调用 

package demo5;

public class Test {
	public static void main(String[] args) {
		/*
		 * 如何调用局部内部类中的方法?
		 * 在局部方法中创建对象调用
		 */
		Outer out = new Outer();
		out.show();
	}
}

 运行结果

三、匿名内部类

作用:匿名内部类是创建某个类型子类对象的快捷方式。

匿名内部类:简化问题,将定义实现类,重写方法,建立实现对象合为一步完成。

(1)接口中的匿名内部类

package demo4;

public interface Smoking {
	public abstract void smoking(); 
	public abstract void brandSmoking();
}
package demo4;

public class Test {
	public static void main(String[] args) {
		Smoking sm = new Smoking() {
			
		
			public void smoking() {
				System.out.println("人在抽烟");
			}
			
			
			public void brandSmoking() {
				System.out.println("我抽的是芙蓉王");
				
			}
		};
		sm.brandSmoking();
		sm.smoking();
	}
}

(2)抽象中的匿名内部类

package demo3;

public  abstract class Animal {
	public abstract void sleep();
	public abstract void eat();
}
package demo3;

public class Test {
	public static void main(String[] args) {
		Animal an=  new Animal() {
			
			public void sleep() {
				System.out.println("在睡觉");
			}
			
			public void eat() {
				System.out.println("在吃饭");
			}
		};
		an.sleep();
		an.eat();
	}
}

四、访问修饰符

特别注意protected 在子类调用的时候,只能在子类的内部进行调用,不可以在子类的外部使用子类对象进行调用。

default 关注的是在不在同一包类,同一包内的都可以使用。

猜你喜欢

转载自blog.csdn.net/weixin_34873452/article/details/88823206