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();
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TwoYellowGuns

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值