内部类和外部类

内部类和外部类

将一个类定义在一个类或者一个方法里面,这样的类称着内部类 。

一、成员内部类

成员内部类就是位于外部类成员位置的类,与外部类的成员和方法是并列的。成员内部类对象的创建依赖于外部类,并且内部类的对象持有指向外部类对象的引用(这个引用是编译器自动给的),所以在内部类中可以直接访问外部类的属性和方法

  1. 内部类可以直接访问外部类的私有属性。
public class Person {
	private int id = 123;
	private int age = 20;
	private String name = "zhang";
	class Inner{//内部类
		public void print() {
			System.out.println(id);
		}
	}
}
class Test {
	public static void main(String[] agrs){
		Person p = new Person();
		Person.Inner in = p.new Inner();//创建Inner内部类的对象
		in.print();//输出123-----通过内部类Inner的对象直接访问了外部类Person的私有属性
	}
}

  1. 外部类不能直接访问内部类的属性,要想访问必须在外部类中先对内部类进行实例化,通过内部类的对象进行访问
public class Person {
	private int id = 123;
	private int age = 20;
	private String name = "zhang";
	class Inner{//内部类
		private int height = 175;
		public void print() {
			System.out.println(id);
		}
	}
	Inner in = new Inner();//在外部类中创建内部类对象
	public void out(){
		System.out.println(in.height);//访问内部类的属性
	}
	public static void main(String[] agrs){
		Person p = new Person();
		p.out();//通过外部类访问内部类的成员属性,输出175
	}
}

  1. 在成员内部类中的方法和属性都不能用static来修饰,如果用了static来修饰的话就会报错

二、静态内部类

成员内部类不能用static来修饰,但是有专门用static来修饰的静态内部类,静态内部类可以用来调用外部类的静态方法和属性,如果用来调用非静态变量或者方法则会报错

public class Person {
	private static int id = 123;
	private static int age = 20;
	private String name = "zhang";

	static class Inner{//静态内部类
		private static int height = 175;
		private String address = "shanghai";
		public static void print() {
			System.out.println(id);
		}

		public static void print1() {
			Person.out3();
		}
	}
	
	Inner in = new Inner();//创建对象来调用内部类的非静态变量

	public static void out(){
		System.out.println(Inner.height);
	}

	public void out2(){
		System.out.println(in.address);//访问内部类的非静态变量
	}

	public static void out3(){
		System.out.println("外部类的静态方法");
	}

	public static void main(String[] agrs){
			Inner.print();//在内部类中访问了外部类的静态成员变量,输出123
			Inner.print1();//在内部类中调用外部类的方法
			Person.out();//外部类中调用内部类的静态成员变量,输出175
			Person p = new Person();
			p.out2();//外部类中调用内部类的非静态成员变量,输出shanghai
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值