内部类基础
1.成员内部类
1.1成员内部类的访问特点
-
内部类可以直接访问外部类的成员,包括私有
-
外部类要访问内部类的成员,必须要创建对象
1.1.1应用实例:
需求:写一个javabean类描述一个汽车
属性:品牌,车龄,颜色,发动机的 品牌,使用年限public class Car {String carName;int carAge;String carColor;public void show(){System.out.println(carName);Engine e = new Engine();System.out.println(e.engineName);}public class Engine{String engineName;int engineAge;public void show(){System.out.println(carName);System.out.println(engineAge);}}} public class Test {public static void main(String[] args) {Car c = new Car();c.carName = "奔驰";c.carAge = 10;c.carColor = "黑色";c.show();} }
1.3如何创建成员内部类对象?
编写成员内部类的注意点:
1.成员内部类可以被一些修饰符所修饰,比如:private,默认,protected,public,static
获取成员内部类的两种方式:
1.外部类编写方法
对外提供内部类对象(内部类函数被private修饰的时候)
代码实例:
public class Outer {String name;public class Inner{}//在外部类中定义方法,返回一个内部类对象public Inner getInstance(){return new Inner();} } public class Tset {public static void main(String[] args) {Outer o = new Outer();//使用了多态,用父类接收子类Object instance = o.getInstance();System.out.println(instance);} }
2.直接在Test类中创建内部类对象
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
范例: Outer.Inner inner = new Outer().new Inner();
public class Outer {String name;public class Inner{} } public class Tset {public static void main(String[] args) {//外部类名.内部类名 对象名 = 外部类对象.内部类对象;Outer.Inner inner = new Outer().new Inner();System.out.println(inner);} }
1.4成员内部类如何获取外部类的成员变量?
面试题:
当外部类成员变量和内部类成员变量重名时,在内部类如何访问
public class Outer {
private int num = 10;
public class Inner{
private int num = 20;
public void show(){
int num = 30;
System.out.println(num);//30
System.out.println(this.num);//20
//Outer.this 获取了外部类对象的地址值
System.out.println(Outer.this.num);//10
}
}
}
public class Test {
public static void main(String[] args)
{
Outer.Inner inner = new Outer().new Inner();
inner.show();
}
}
2.静态内部类
静态内部类是一种特殊的成员内部类
静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建外部类的对象。