JAVA SE(十二)—— JAVA 面向对象6(内部类、匿名内部类)

一、Java内部类

1、创建内部类对象语法

外部类名.内部类名  对象名 = new  外部类名().内部类名()

2、访问规则
(1)内部类可以直接访问外部内的成员,包括私有。 之所以能够访问外部类中的成员,是因为内部类中持有了一个外部类的引用, 格式 外部类名.this

(2)外部内要访问内部类,必须建立内部类对象

3、访问格式
示例
内部类类

public class Outer{
	private String name = "张三";
	private int age = 10;
	public void eat() {
		
	}
	//创建一个内部类
	class Inner{
		public  void sleep() {
			System.out.println(name + "在睡觉");
		}
	}
}

main函数类

public class Demo {
	public static void main(String[] args) {
		Inner in = new Outer().new Inner();
		in.sleep();
	}
}

(1)当内部类定义在外部内的成员位置上,而且非私有,可以在外部其他类中直接建立内部类对象。 格式:

外部类名.内部类名  变量名 = 外部类对象.内部类对象; 
Outer.Inter  in = new Outer().new Inner();

(2)当内部类在成员位置上,就可以被成员修饰符所修饰。比如:

  • private:将内部类在外部类中进行封装。
  • static:内部类就具备静态的特性。
  • 当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限
  • 在外部其他类中,直接访问static内部类的非静态成员:
new Outer( ).Inner( ).function( );
  • 在外部其他类中,直接访问static内部类的静态成员:
	Outer.Inner( ).function( );

二、Java 匿名内部类

1、匿名内部类概述
匿名内部类是指没有名字的内部类。

2、匿名内部类格式:

new 接口名/父类/抽象类( ){
	重写方法 
}

(1)这个类如果是接口,会自动实现;
(2)如果是抽象类/普通类,会继承这个抽象类;
(3)不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现;

3、要调用对象,直接在后面用.类名调用。
示例1

public abstract class Smoking{
	public abstract void smoke();
}

//main函数类
public class Demo1 {
	public static void main(String[] args) {
		new Smoking() {
			@Override
			public void smoke() {
				System.out.println("请勿吸烟");
			}
		}.smoke();
	}
}

示例2

public interface Smoking{
	void smoke();
}
public class Demo2 {
	public static void main(String[] args) {
		new Smoking() {
			@Override
			public void smoke() {
				System.out.println("请勿吸烟");
			}
		}.smoke();
	}
}

另外,调用的方式也可以是下面这种

public abstract class Smoking{
	public abstract void smoke();
}
//main函数类
public class Demo2 {
	public static void main(String[] args) {
		Smoking smoking = new Smoking() {
			@Override
			public void smoke() {
				System.out.println("请勿吸烟");
			}
		};
		//用这个对象来调用方法
		smoking.smoke();
	}
}
发布了40 篇原创文章 · 获赞 0 · 访问量 362

猜你喜欢

转载自blog.csdn.net/baidu_27414099/article/details/104424855