【Java】基础入门(十四)--- 内部类和匿名类

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 的。
  • 匿名类一般是实现接口、继承抽象类。相当于实现、继承了这个接口/类。

你可能感兴趣的:(Java,java,开发语言)