1.内部类
(1)什么是内部类?
内部类,就是指将一个类定义在另一个类的内部,称为内部类
// 外部类
public class Car{
String carName;
int carAge;
int carColor;
//内部类
class Engine{
String engineName;
int engineAge;
}
}
(2)内部类的访问特点?
内部类可以直接访问外部类的成员,包括私有;
package swp.kaifamiao.codes.Java.d0828;
/**
* {class description}
*
* @author SWP
* @version 1.0.0
*/
public class Car{
private String carName;
int carAge;
String carColor;
class Engine{
String engineName;
int engineAge;
public void show(){
System.out.println(engineName);
//carName是外部类的私有成员,但是也可以直接访问
System.out.println(carName);
}
}
}
外部类要访问内部成员,必须创建对象;
(3) 获取成员内部类对象的两种方法:
外部类编写方法,对外提供内部类对象;
直接创建:(外部类名.内部类类名 对象名 = 外部类对象.内部类对象);
一个类可以有多个内部类,内部类可以实现接口和继承类。内部类可以解决 java 类单继
承问题,因为内部类和外部类可以相互访问。
2.内部类与外部类的区别?
(1)访问修饰符:
- 外部类只能有两种访问权限:
public
以及package-access
- 内部类可以有四种访问权限:
public
/protected
/package-access
/private
(2)static 修饰: 外部类不可以使用 static 修饰类,但是内部类可以
(3)使用:外部类可以直接被使用,内部类的使用则依赖于外部类
3.匿名类
(1)匿名类是没有明确的名称的类。
之前定义的类都是命名类,也就是类都有明确的名称。匿名类是指没有明确的名称。
- 示例:定义接口A1,定义命名类B1,B1实现接口A1。
package swp.kaifamiao.codes.Java.d0828;
/**
* {class description}
*
* @author SWP
* @version 1.0.0
*/
public interface A1 {
void show();
}
//命名类B1
class B1 implements A1{
public void show(){
System.out.println("我是命名类B的show()方法");
}
}
class Test{
public static void main(String[] args) {
A1 a1 = new B1();
a1.show();
}
}
将上述例题设置为匿名类,如下:
package swp.kaifamiao.codes.Java.d0828;
/**
* {class description}
* * @author SWP
* @version 1.0.0
*/
public interface A2 {
void show();
}
class Test02{
public static void main(String[] args) {
A2 a1 = new A2(){
public void show(){
System.out.println("我是匿名类的show()方法");
}
};
a1.show();
}
}
- 匿名类不能使用修饰符,在方法的内部,对外隐藏。不能是 static ,隐式 final 类。匿
名类没有类名,没有构造方法。 - 匿名类可以访问类中的成员,不能访问方法中的变量,除非是 final 的。
- 匿名类一般是实现接口、继承抽象类。相当于实现、继承了这个接口/类。