编程语言
首页 > 编程语言> > Java学习笔记09

Java学习笔记09

作者:互联网

内部类: 


    将⼀个类A定义在另⼀个类B⾥⾯,⾥⾯的那个类A就称为内部类,B则称为外部类。

内部类的分类:


    成员内部类(非静态内部类)
        a.可以使用的权限修饰符: public protected default  private
        
        b.语法

class Car { //外部类
 class Engine { //内部类
 
 }
}
//外部类名.内部类名 对象名 = new 外部类型().new 内部类型(); 
Car.Engine engine = new Car().new Engine();

        c.特点:
            1.内部类中,可以随意调用外部类成员
            2.外部类中,使用内部类成员时,需要创建内部类对象
            3.无关类中使用成员内部类
                1).间接调用,在外部类中的方法创建内部类的对象
                2).直接调用,创建内部类对象
                    ps:  new Outer().new Inner()

            4.内部类和外部类中有同名的成员变量情况:
                a.获取外部类成员变量
                    类名.this.变量名
                b.获取内部类成员变量
                    this.变量名
                c.获取方法内的局部变量
                    变量名

    局部内部类[匿名内部类]
        局部变量:
            a.在方法内部定义的类,只在方法中有效
            b.在局部内部类中,使用局部变量,必须是final修饰的
            c.一次性的类,只能使用一次
            d.不能使用访问修饰符
            e.作用:一般都是结合抽象类/接口使用
        [*匿名内部类]:
            作用:实现接口/继承抽象类
            缺点:一次性使用
            语法:
                接口/抽象类  引用名 = new 接口/抽象类(){实现类实现的抽象方法}

new ⽗类名或者接⼝名() {
 // ⽅法重写
 @Override
 public void method() {
 // 执⾏语句
 }
};

            匿名对象:
                只能使用一次,只能调用一次方法
                
 

public abstract class FlyAble {
 public abstract void fly();
}


public class InnerDemo {
 public static void main(String[] args) {
 /*
 * 1.等号右边:是匿名内部类,定义并创建该接⼝的⼦类对象
 * 2.等号左边:是多态赋值,接⼝类型引⽤指向⼦类对象
 */
 FlyAble f = new FlyAble() {
 public void fly() {
 System.out.println("我⻜了~~~");
 }
 };
 
 // 调⽤fly⽅法,执⾏重写后的⽅法
 f.fly();
 }
}


public class InnerDemo2 {
 public static void main(String[] args) {
 /*
 * 1.等号右边:定义并创建该接⼝的⼦类对象
 * 2.等号左边:是多态,接⼝类型引⽤指向⼦类对象
 */
 FlyAble f = new FlyAble() {
 public void fly() {
 System.out.println("我⻜了~~~");
 }
 };
 // 将f传递给showFly⽅法中
 showFly(f);
 }
 public static void showFly(FlyAble f) {
 f.fly();
 }
}

 

标签:fly,Java,内部,void,09,笔记,FlyAble,new,public
来源: https://blog.csdn.net/akanistha/article/details/119356654