java面向对象内部类、抽象类、接口类

来源:互联网 发布:安阳淘宝电商摄影 编辑:程序博客网 时间:2024/05/18 02:02
一、内部类        1、内部类概述            (1)把类定义在另一个类的内部,该类就被称为内部类。                举例:把类B定义在类A中,类B就被称为内部类。        2、访问规则                    内部类的访问规则            A:可以直接访问外部类的成员,包括私有            B:外部类要想访问内部类成员,必须创建对象        3、内部类的分类                (1)内部类的分类                    A:成员内部类                    B:局部内部类                (2)成员内部类                    A:private 为了数据的安全性                    B:static 为了访问的方便性                    成员内部类不是静态的:                        外部类名.内部类名 对象名 = new 外部类名.new 内部类名();                    成员内部类是静态的:                        外部类名.内部类名 对象名 = new 外部类名.内部类名();        4、局部内部类                局部内部类                A:局部内部类访问局部变量必须加final修饰。                B:为什么呢?                    因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。                    所以,堆内存还是用该变量,而改变量已经没有了。                    为了让该值还存在,就加final修饰。                    通过反编译工具我们看到了,加入final后,堆内存直接存储的是值,而不是变量名。        5、匿名内部类                        匿名内部类(掌握)                A:是局部内部类的简化形式                B:前提                    存在一个类或者接口                C:格式:                    new 类名或者接口名() {                        重写方法;                    }                D:本质:                    其实是继承该类或者实现接口的子类匿名对象        6、开发中的使用
匿名内部类在开发中的使用        我们在开发的时候,会看到抽象类,或者接口作为参数。        而这个时候,我们知道实际需要的是一个子类对象。        如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式简化。        interface Person {            public abstract void study();        }        class PersonDemo {            public void method(Person p) {                p.study();            }        }        class PersonTest {            public static void main(String[] args) {                PersonDemo pd = new PersonDemo();                pd.method(new Person() {                    public void study() {                        System.out.println("好好学习,天天向上");                    }                });            }        }
        7、面试题
interface Inter{    void method();}class Test{    //补足代码,通过匿名内部类。    /*    static class Inner implements Inter    {        public void method()        {            System.out.println("method run");        }    }    */    static Inter function()    {        return new Inter()        {            public void method()            {                System.out.println("method run");            }        };    }}class  InnerClassTest{    public static void main(String[] args)     {        //Test.function():Test类中有一个静态方法function        //.method():function这个方法运算后的结果是一个对象。而且是一个Inter类型的对象。        Test.function().method();//其实就是Inter in = Test.function();        //in.method();    }}
二、抽象类        1、概述                (1)把多个共性的东西提取到一个类中,这是继承的做法。           但是呢,这多个共性的东西,在有些时候,方法声明一样,但是方法体具体实现不一样。           也就是说,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样。           所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。           而一个没有具体的方法体的方法是抽象的方法,需要被指定关键字abstract所标示。           在一个类中如果有抽象方法,该类必须定义为抽象类。        2、抽象类的特点                    抽象类的特点            A:抽象类和抽象方法必须用关键字abstract修饰            B:抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类            C:抽象类不能实例化            D:抽象类的子类                a:是一个抽象类。                b:是一个具体类。这个类必须重写抽象类中的所有抽象方法。        3、抽象类的成员特点                    A:成员变量                        有变量,有常量                    B:构造方法                        有构造方法                    C:成员方法                        有抽象,有非抽象        4、抽象类的几个小问题                抽象类的几个小问题            A:抽象类有构造方法,不能实例化,那么构造方法有什么用?                用于子类访问父类数据的初始化            B:一个类如果没有抽象方法,却定义为了抽象类,有什么用?                为了不让创建对象            C:abstract不能和哪些关键字共存                a:final 冲突                b:private 冲突                c:static 无意义三、接口类        接 口(掌握)        1:是用关键字interface定义的。        2:接口中包含的成员,最常见的有全局常量、抽象方法。注意接口没有构造方法        注意:接口中的成员都有固定的修饰符。            成员变量:public static final             成员方法:public abstract         interface Inter{            public static final int x = 3;            public abstract void show();        }        3:接口中有抽象方法,说明接口不可以实例化。接口的子类必须实现了接口中所有的抽象方法后,        该子类才可以实例化。            否则,该子类还是一个抽象类。        4:类与类之间存在着继承关系,类与接口中间存在的是实现关系。            继承用extends  ;实现用implements ;        5:接口和类不一样的地方,就是,接口可以被多实现,这就是多继承改良后的结果。java            将多继承机制通过多现实来体现。         6:一个类在继承另一个类的同时,还可以实现多个接口。所以接口的出现避免了单继承的局限性。            还可以将类进行功能的扩展。        7:其实java中是有多继承的。接口与接口之间存在着继承关系,接口可以多继承接口。        回顾猫狗案例,它们仅仅提供一些基本功能。           比如:猫钻火圈,狗跳高等功能,不是动物本身就具备的,           是在后面的培养中训练出来的,这种额外的功能,java提供了接口表示。        接口都用于设计上,设计上的特点:(可以理解主板上提供的接口)        1:接口是对外提供的规则。        2:接口是功能的扩展。        3:接口的出现降低了耦合性。抽象类&接口区别    抽象类与接口:            抽象类:一般用于描述一个体系单元,将一组共性内容进行抽取,特点:可以在类中定义            抽象内容让子类实现,            可以定义非抽象内容让子类直接使用。它里面定义的都是一些体系中的基本内容。            接口:一般用于定义对象的扩展功能,是在继承之外还需这个对象具备的一些功能。        抽象类和接口的共性:都是不断向上抽取的结果。        抽象类和接口的区别:            1:抽象类只能被继承,而且只能单继承。            接口需要被实现,而且可以多实现。             2:抽象类中可以定义非抽象方法,子类可以直接继承使用。            接口中都有抽象方法,需要子类去实现。            3:抽象类使用的是  is a 关系。            接口使用的 like a 关系。             4:抽象类的成员修饰符可以自定义。            接口中的成员修饰符是固定的。全都是public的。        在开发之前,先定义规则,A和B分别开发,A负责实现这个规则,B负责使用这个规则。至于        A是如何对规则具体实现的,        B是不需要知道的。这样这个接口的出现就降低了A和B直接耦合性。 
0 1
原创粉丝点击