11 内部类及带包编译

11

带包编译

1.首先使用高级编辑器或记事本编写一个HelloWorld程序

package com.doit.test;
class HelloWorld{
	public static void main(String[]args){
		
		System.out.println("hello world");
	}
}

2.命令行编译执行

  • 手动式 :

    • 命令行编译HellWorld.java

    • 按照包的格式将对应的文件夹创建好 , 将HelloWorld.class文件拷贝到创建好的文件夹中

    • 命令行执行

  • 自动式 :

    • javac(空格)-d(空格).(空格) HelloWorld.java
    • java(空格)包名.类名

附:

  • java文件的结构 : 1.包结构 2.导包 3.类
  • 默认情况下 , lang包下的所有的类都不用导包
  • 其他的java类 , 都需要导包 , 包括lang包下面的子包
权限修饰符
  • public : 修饰类 , 变量和方法 . 可以在任意时候 , 任意地点随意访问
  • protected : 修饰变量和方法 . 受保护的 , 当前包内随意访问 . 若跨包访问 , 则必须成为当前类的子类 , 而且调用该方法 , 必须在子类中创建子类对象才能调用
  • default : 当前包内随意访问 . 不允许跨包访问
  • private : 只能在当前类中访问
publicprotecteddefaultprivate
同一类
同一包(子类/其他类)
不同包子类
不同包其他类

内部类

  • 定义在类内部的类
成员内部类
  • 没有static修饰 , 定义在成员的位置 , 跟成员方法和成员变量平级的内部类叫做成员内部类

    • 成员内部类不能定义静态的方法和变量

    • 成员内部类可以无限制访问外部类中的成员 , 包含私有变量和静态成员

创建内部类的对象
外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
内部类中访问外部类中同名成员
外部类名.this.成员
//成员内部类
public class Demo1 {
	public static void main(String[] args) {
		
		Outer.Inner in = new Outer().new Inner();
		in.show();
		
		new Outer().new Inner().show();
	}
}

class Outer{
	private int a = 11;
	class Inner{
		int a = 22;
		public void show() {
			System.out.println("Hello World!!"+"--"+new Outer().a);		
			System.out.println("Hello World!!"+"--"+Outer.this.a);
			System.out.println("Hello World!!"+"--"+this.a);
		}
	}
}
局部内部类
  • 定义在方法中或者代码块中的类 , 跟局部变量平级
    • 局部内部类只能在方法中被认识
    • 局部内部类不能使用 public private protected 修饰符修饰
//局部内部类
public class Demo2 {
	public static void main(String[] args) {
		
		Outerr out = new Outerr();
		out.show();
	}
}

class Outerr{
	private int a = 11;
	
	public void show() {
		int b = 22;
		
		class Innerr{
			public void get() {
				System.out.println("我是局部内部类的get方法"+a+b);
			}
		}
		Innerr inn = new Innerr();
		inn.get();
	}
}
静态内部类
  • 定义在成员位置 , 被static修饰的类
    • 静态内部类中既可以定义静态成员 , 又可以定义非静态成员
    • 有静态成员的内部类一定是静态内部类
访问静态内部类中的成员
//静态成员
外部类名.内部类名.静态成员

//非静态成员
new 外部类名.内部类名().非静态成员
//静态内部类
public class Demo3 {
	public static void main(String[] args) {
		Outer.Inner.show();
		new Outer.Inner().get();
	}
}

class Outer{
	int a = 0;
	static class Inner{
		static int b = 10;
		public static void show() {
			System.out.println("Inner show");
		}
		public void get() {
			System.out.println("Inner get");
		}
	}
}
匿名内部类
  • 想要继承一个类或者实现一个接口用于重写里面的某些方法 , 使用匿名内部类
  • 本质是一个实现接口或者继承了(抽象)类的子类的 对象
格式 :
new 接口名/类名(){
    重写或者实现的方法
}
//匿名内部类
public class Demo4 {
	public static void main(String[] args) {
		Animal ani = new Animal() {
			@Override
			public void sleep() {
				System.out.println("动物都爱睡觉");
			}
		};
		ani.sleep();

		new User() {
			@Override
			public void login() {
				System.out.println("用户登录成功");
			}
		}.login();
	}
}
abstract interface Animal{
	public abstract void sleep();
}
interface User{
	public void login();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值