内部类概念:顾名思义,就是将一个类定义在另一个个类内部。内部的类称之为内部类 。
内部类的主要特点:
1.内部类可以很好的实现隐藏,可以使用protected、private修饰符。
2.内部类可以直接访问外部类的所有成员,包括私有成员。
3.外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才可以访问。
4.内部类可以解决一些问题,比如间接地实现继承。可以避免修改接口而实现同一个类
中两种同名方法的调用
内部类有四种:
成员内部类,静态内部类,匿名内部类,局部内部类
起名字时,$符号是合法字符,是为内部类准备的
成员的内部类特点:
1.成员内部类属于外部类的实例成员,成员内部类可以有public,private,default,
protected权限修饰符。在成员内部类中访问外部类的成员方法和属性,要使用“外部
类名.this.成员方法”和“外部类名.this.成员属性”的形式。
2.创建成员内部类的实例使用“外部类名.内部类名 实例名=外部类实例名.new 内部
类构造方法(参数)”的形式。
成员内部类的限制:
1.成员内部类不能与外部类重名
2.不能在成员内部类中定义static属性、方法和类(static final形式的乘凉定义除外)因
为一个成员内部类实例必然与一个外部类实例关联,static成员完全可以移到其外部类
去。
public class MemberInnerClassDemo { public static void main(String[] args) { // TODO Auto-generated method stub Outer1 outer1 = new Outer1(); Outer1.Inner1 inner1 = outer1.new Inner1(); outer1.outer(); inner1.inner(); } } class Outer1{ private String name = "张三"; private int num1 = 1; public void outer() { System.out.println(name+" "+num1); //System.out.println(num2);外部类不能直接访问内部类成员 Inner1 inner1 = new Inner1();//外部类可以实例化内部类,访问内部类 inner1.inner(); } class Inner1{//如果内部类声明为private类型,则外部无法访问通过外部类内部类 private String name = "李四"; private int num2 = 2; //private static final int num3 = 3;在成员内部类中可以声明静态常量 //private static int num3 = 3;在成员内部类中不能声明静态成员,包括属性和方法 public void inner() { System.out.println(name+" "+num2); System.out.println(Outer1.this.name+" "+Outer1.this.num1);//内部类调用外部类属性 outer();//内部类可以直接访问外部类的属性和方法,包括私有的 Outer1.this.outer();//和上面的一样,区别是如果内部类出现重名,那么这样可以解决 } } }
原文地址:https://www.cnblogs.com/liubing2018/p/8450297.html
时间: 2024-11-05 15:54:26