面向对象-内部类与枚举

内部类

内部类:定义在类当中的一个类

内部类作用:
1.增强封装,把内部类隐藏在外部类当中,不允许其他类访问这个内部类
2.增加了代码的维护性
3.内部类可以直接访问外部类当中成员

提示:外部类的修饰符只能有两个 public 和 默认 其他什么都不加 内部类的修饰符可以任意使用

类当中的成员:
字段
方法
内部类

外部类
class Out{
    内部类
    class In{
    }
    
}

内部类划分

内部类可以分为四种

1.实例化内部类:直接定义在类中的一个类,在类前面没有定义任何一个修饰符
2.静态内部类:在内部类前面加上一个static
3.局部内部类:定义在方法的内部类
4.匿名内部类:属于局部内部类的一种特殊情况

外部类的修饰符只能有两个,public 或者是 默认修饰符

内部类可以使用很多个修饰符


实例内部类

实例内部类:直接定义在类当中的一个类,在类前面没有任何一个修饰符
属于对象的内部类,不属于类的,不使用static修饰的内部类

想要使用内部类,必须得要先创建内部类

        创建实例内部类
        创建内部类对象当中,会有一个外部类的引用
        Outter Outter = new Outter();
        Outter.Inner in = Outter.new Inner();

在内部类当中可以访问外部类当中的成员

在内部类当中,不能有静态成员(实例内部类属于对象)

外部类不能直接访问内部类当中的成员

变量的访问:就近原则
class Outter{
    String name="outtername";
    
    class Inner{
        String name = "innername";
        void test() {
            String name = "testname";
            System.out.println(name);//testname
            System.out.println(this.name);//innername
            System.out.println(Outter.this.name);//outtername
        }
    
    }
    
}



public class InnerClass {

    public static void main(String[] args) {
        
        Outter Outter = new Outter();

        
        //创建实例化内部类
        //创建内部类对象那个当中,会有一个外部类的引用
        Outter.Inner in = Outter.new Inner();
        in.test();
    }

}
创建内部类对戏那个当中,会有一个外部类的引用

静态内部类

静态内部类:
属于类的内部类
在内部类前面加上static

1.静态内部类是不需要创建外部类对象的

        创建内部类
        Outter.Inner in = new Outter.Inner();

2.在静态内部类当中,是没有外部类引用的(外部类不用创建对象)


3.静态内部类,是可以访问外部类的静态成员

        静态内部类,是不可以访问外部类的非静态成员
        如果想访问外部非静态成员可以创建外部类对象

class Outter {
    static String name = "zs";
    int age = 10;

    static class Inner {
    static String color = "black";      
        void test() {
            //System.out.println(name);静态成员可以之计访问
            //System.out.println(age);会报错
            System.out.println(new Outter().age);//10
            
        }
        
    }

}

4.访问静态内部类当中的静态成员 System.out.println(Outter.Inner.color);

5.静态内部类当中可以定义静态成员,也可以定义非静态成员



局部内部类

局部内部类:定义在方法的内部类
1.不能使用一些修饰符 public private protected
2.局部内部类只能在定义的方法当中使用
3.局部内部类不能包含静态变量 static
4.局部内部类当中可以包含局部变量,使用局部变量的本质是final 常量

final存在于方法区当中
对当中一个对象没有人引用,它并不是直接就销毁


匿名内部类

匿名内部类:就是一个没有名字的局部内部类(方法当中的)
匿名内部类是没有构造器的(因为没名字) 一个文件对应一个类

匿名内部类只使用一次的时候,来去使用匿名内部类

interface IUSB {
    void swapData();
}

class MotherBorad{
    void pluginIn(IUSB u) {
        u.swapData();
    }
}

class Printer implements IUSB{

    @Override
    public void swapData() {
        System.out.println("打印工作");
        
    }
    
}
new  父类的构造器   或  接口(){    
内部写的代码(在new的时候就会自动执行)
 }

    public static void main(String[] args)  {
        
        MotherBorad b =  new MotherBorad();
        b.pluginIn(new IUSB() {//创建匿名内部类对象
            public void swapData() {
                System.out.println("打印工作");
            }
            
        });
        
        
    }

匿名内部类必须得要有父类才行,或者是实现了接口


package 模拟枚举;

enum WeekDay{
    MONDAY,TUESDAY,WENDSDAY,THURDAY,FRIDAY,SATURDAY,SUNDAY;
}使用枚举之后与下面注释了的代码相同作用



//定义一个星期几的常量类
/*class WeekDay {
    private WeekDay();
    public static final WeekDay MONDAY = new WeekDay();
    public static final WeekDay TUESDAY = new WeekDay();
    public static final WeekDay WENDESDAY = new WeekDay();
    public static final WeekDay THURSDAY = new WeekDay();
    public static final WeekDay FRIDAY = new WeekDay();
    public static final WeekDay SATURDAY = new WeekDay();
    public static final WeekDay SUNDAY = new WeekDay();

}*/

class Student {

    private WeekDay restDay;
    
    public WeekDay getRestDay() {
        return restDay;
    }
    
    public void setRestDay(WeekDay restDay) {
        this.restDay = restDay;
    }


}

public class Test {

    public static void main(String[] args) {
    
        Student stu = new Student();
    
        stu.setRestDay(WeekDay.SATURDAY);
        
        WeekDay res =  stu.getRestDay();
        
        if(res==WeekDay.SATURDAY||res==WeekDay.SUNDAY) {
            System.out.println("你放假了");
        }else {
            System.out.println("别想了,继续上课");
        }
        
    }

}

枚举的定义

枚举:表示一个事件的固定状态
java 枚举:是一个特殊的类,多个常量对象的集合
继承了Enum的类

[修饰符] enum 枚举的名称{
        常量1, 常量2, 常量3, 常量4.....
}
enum Sex {
    MALE, FEMALE;
}

不能直接创建对象
在编译的时候会把构造器私有化,就不能创建对象了(在反编译工具中看到的)

枚举还可以用在switch当中,其实是传入的是本质还是int类型,返回的是ordinal,传入的值在当前的下标

enum Sex {
    MALE, FEMALE;
}

public class Test1 {

    public static void main(String[] args) {
    
        System.out.println(Sex.FEMALE);
        System.out.println(Sex.FEMALE.name());
        System.out.println(Sex.FEMALE.ordinal());
        System.out.println(Sex.MALE.name());
    
        switch (Sex.MALE) {
        case FEMALE:
            break;
        case MALE:
            break;
        }
    
        Sex s = Sex.valueOf("MALE");转换成枚举类型  字符串必须得是枚举当中的一个值
        System.out.println(s);
    
        // 获取枚举当中的所有元素,放到一个数组当中
        Sex[] alllres = Sex.values();
        for (Sex sex : alllres) {
            System.out.println(sex);
        }
        System.out.println(alllres[1]);
    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,695评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,569评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,130评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,648评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,655评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,268评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,835评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,740评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,286评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,375评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,505评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,873评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,357评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,466评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,921评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,515评论 2 359

推荐阅读更多精彩内容