黑马程序员技术交流社区

标题: 【上海校区】面向对象-----类的成员之内部类 [打印本页]

作者: 梦缠绕的时候    时间: 2020-3-30 09:24
标题: 【上海校区】面向对象-----类的成员之内部类
1.内部类的分类成员内部类(静态和非静态)和局部内部类(方法内、代码块内、构造器内)
2.成员内部类的理解
一方面,作为外部类的成员:
   >调用外部类的结构
   >可以被static修饰
   >可以被4种不同的权限修饰
另一方面,作为一个类:
   > 类内可以定义属性、方法、构造器等
   > 可以被final修饰,表示此类不能被继承。言外之意,不使用final,就可以被继承
   > 可以被abstract修饰
特点:
  • 成员内部类可以无条件的访问外部类的所有的成员属性和方法不受 private 和 static影响
  • 当内部类的成员属性或者方法与外部类的同名时,会发生隐藏现象。直接在内部类中调用的是内部类的成员属性和方法。需要用 “外部类”.this.成员变量/成员方法
  • 如果外部类需要访问内部类,需要生成内部对象,才能访问内部类对象。
  • 成员内部类是依附外部类存在的,如果需要访问成员内部类,那么一定需要先创建外部类。
  • 由于成员内部类的以为外部类的成员的方式存在,所以类修饰可以用 private public protect 无权限的修饰符修饰来表示内部的访问权限的问题。而外部内不可以。


[url=][/url]
public class test {    public static void main(String[] args) {        //创建静态的成员内部类的对象        Person.Inner2 inner2 = new Person.Inner2();        //创建非静态的成员内部类的对象        Person p = new Person();        Person.Inner1 inner1 = p.new Inner1();        inner1.show();//name = 小张, age = 23        inner2.show();//静态成员内部类    }}class Person{    String name;    int age;    //非静态成员内部类    class Inner1{        public void show(){            name = "小张";            age = 23;            System.out.println("name = " + name + ", age = "+ age);        }    }    //静态成员内部类    static class Inner2{        public void show(){            System.out.println("静态成员内部类");        }    }    public void eat(){        System.out.println("人吃饭");    }}[url=][/url]

3.如何在成员内部类中调用外部类的结构?[url=][/url]
class Person{    String name = "小明";public void eat(){}//非静态成员内部类    class Bird{        String name = "杜鹃";        public void display(String name){            System.out.println(name);//方法的形参            System.out.println(this.name);//内部类的属性            System.out.println(Person.this.name);//外部类的属性        //Person.this.eat();        }    }}[url=][/url]

4.局部内部类特点:

5.匿名内部类特点:



作者: 梦缠绕的时候    时间: 2020-3-30 09:24
有问题欢迎添加小优:DKA-2018




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2